python3 樹莓派 + usb攝像頭 做顏色識別 二維碼識別


今天又啥也沒干 我完蛋了哦  就是沒辦法沉下心來,咋辦。。。。還是先來條NLP吧。。

七,凡事必有至少三個解決方法

  對事情只有一個方法的人,必陷入困境,因為別無選擇。

  對事情有兩個方法的人也陷入困境,因為他制造了左右兩難,進退維谷的局面給自己。

  有第三個方法的人,通常會找到第四,五個方法,甚至更多的方法。

  有選擇就是有能力,所以,有選擇總比沒有選擇好。

  至今不成功,只是說至今用過的方法都得不到想要的效果。

  沒有辦法,只是說已知的辦法都行不通。

  世界上尚有很多我們過去沒有想過,或者尚未認識的方法。

  只有相信尚有未知的有效方法,才會有機會找到它和使事情改變。

  不論什么事情,我們總有選擇的權利,而且不只是一個。

  “沒有辦法”使事情畫上句號,“總有辦法”使事情有突破的可能。

  “沒有辦法”對你沒有好處,應停止想它;“總有辦法”對你有好處,故應把它留在腦中。

   為何不使自己成為第一個找出辦法的人?


 

額。。。純粹就是今天沒得寫的了,只好丟點以前寫的摳腳程序,也不能叫程序,只能實現功能吧。。。也是東抄點,西抄點,然后一拼來的。。。。。

用的樹莓派3B+  然后插個usb攝像頭  就行了

文件名:colorList.py   這是顏色庫。。。

  1 # -*- coding:UTF-8 -*-
  2 import numpy as np
  3 import collections
  4 
  5 
  6 def getColorList():
  7     dict = collections.defaultdict(list)
  8 
  9     # black
 10     lower_black = np.array([0, 0, 0])
 11     upper_black = np.array([180, 255, 46])
 12     color_list_black = []
 13     color_list_black.append(lower_black)
 14     color_list_black.append(upper_black)
 15     dict['black'] = color_list_black
 16 
 17     # gray
 18     lower_gray = np.array([0, 0, 46])
 19     upper_gray = np.array([180, 43, 220])
 20     color_list_gray= []
 21     color_list_gray.append(lower_gray)
 22     color_list_gray.append(upper_gray)
 23     dict['gray'] = color_list_gray
 24 
 25     # white
 26     lower_white = np.array([0, 0, 221])
 27     upper_white = np.array([180, 30, 255])
 28     color_list_white = []
 29     color_list_white.append(lower_white)
 30     color_list_white.append(upper_white)
 31     dict['white'] = color_list_white
 32 
 33     # red
 34     lower_red = np.array([156, 43, 46])
 35     upper_red = np.array([180, 255, 255])
 36     color_list_red = []
 37     color_list_red.append(lower_red)
 38     color_list_red.append(upper_red)
 39     dict['red'] = color_list_red
 40 
 41     # red2
 42 
 43     lower_red = np.array([0, 43, 46])
 44     upper_red = np.array([10, 255, 255])
 45     color_list_red2 = []
 46     color_list_red2.append(lower_red)
 47     color_list_red2.append(upper_red)
 48     dict['red2'] = color_list_red2
 49 
 50     # orange
 51     lower_orange = np.array([11, 43, 46])
 52     upper_orange = np.array([25, 255, 255])
 53     color_list_orange = []
 54     color_list_orange.append(lower_orange)
 55     color_list_orange.append(upper_orange)
 56     dict['orange'] = color_list_orange
 57 
 58     # yellow
 59     lower_yellow = np.array([26, 43, 46])
 60     upper_yellow = np.array([34, 255, 255])
 61     color_list_yellow = []
 62     color_list_yellow.append(lower_yellow)
 63     color_list_yellow.append(upper_yellow)
 64     dict['yellow'] = color_list_yellow
 65 
 66     # green
 67     lower_green = np.array([35, 43, 46])
 68     upper_green = np.array([77, 255, 255])
 69     color_list_green = []
 70     color_list_green.append(lower_green)
 71     color_list_green.append(upper_green)
 72     dict['green'] = color_list_green
 73 
 74     # cyan
 75     lower_cyan = np.array([78, 43, 46])
 76     upper_cyan = np.array([99, 255, 255])
 77     color_list_cyan = []
 78     color_list_cyan.append(lower_cyan)
 79     color_list_cyan.append(upper_cyan)
 80     dict['cyan'] = color_list_cyan
 81 
 82     # blue
 83     lower_blue = np.array([100, 43, 46])
 84     upper_blue = np.array([124, 255, 255])
 85     color_list_blue = []
 86     color_list_blue.append(lower_blue)
 87     color_list_blue.append(upper_blue)
 88     dict['blue'] = color_list_blue
 89 
 90     # purple
 91     lower_purple = np.array([125, 43, 46])
 92     upper_purple = np.array([155, 255, 255])
 93     color_list_purple = []
 94     color_list_purple.append(lower_purple)
 95     color_list_purple.append(upper_purple)
 96     dict['purple'] = color_list_purple
 97 
 98     return dict
 99 
100 
101 if __name__ == '__main__':
102     color_dict = getColorList()
103     print(color_dict)
104 
105     num = len(color_dict)
106     print('num=', num)
107 
108     for d in color_dict:
109         print('key=', d)
110         print('value=', color_dict[d][1])

然后是 xf_color.py  這就能識別顏色了 (這是識別已有圖片文件版的)  原理就是用上面的色庫 算出圖片顏色面積  哪個最大 就算是啥顏色。。。摳腳。。。

# -*- coding:UTF-8 -*-
import cv2
import colorList


def get_color(frame):
    print('go in get_color')
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    maxsum = 0
    color = None
    color_dict = colorList.getColorList()
    for d in color_dict:
        mask = cv2.inRange(hsv, color_dict[d][0], color_dict[d][1])
        # cv2.imwrite(d + ".png", mask)
        binary = cv2.threshold(mask, 127, 255, cv2.THRESH_BINARY)[1]
        binary = cv2.dilate(binary, None, iterations=2)
        # cv2.imwrite(d +"1.png", binary)
        cnts = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2]
        sum = 0
        for c in cnts:
            sum += cv2.contourArea(c)
        # print("%s  , %d" %(d, sum ))
        if sum > maxsum:
            maxsum = sum
            color = d
    return color


if __name__ == '__main__':
    filename = "./images/test_yellow.png"
    frame = cv2.imread(filename)
    print(get_color(frame))

文件名:xf_realize.py    這是用攝像頭來識別顏色。。。就是加了個拍照功能  哦對 只返回紅綠藍三種顏色,因為搬的物料就是這三種顏色  懶得改了。。

# -*- coding:UTF-8 -*-
import cv2            
import xf_color


def videox():
    vix = cv2.VideoCapture(0)
    while True:
        ret, tu = vix.read()
        cv2.imshow("take_photo", tu)
        cv2.waitKey(1)
        cv2.imwrite("color.png", tu)
        filename = cv2.imread("color.png")
        color = xf_color.get_color(filename)

        if color == "red" or color == "red2":
            print("red")
            result = "1"
            break
        elif color == "green":
            print("green")
            result = "2"
            break
        elif color == "blue":
            print("blue")
            result = "3"
            break
    vix.release()
    cv2.destroyAllWindows()
    return result


if __name__ == '__main__':
    videox()  

接下來是識別二維碼的(有二維碼圖片文件)  文件名: xf_scance.py

# -*- coding:UTF-8 -*-
import pyzbar.pyzbar as pyzbar
from PIL import Image, ImageEnhance


def scance():

    image = "photo.png"

    img = Image.open(image)

    # img = ImageEnhance.Brightness(img).enhance(2.0)  # 增加亮度
    #
    # img = ImageEnhance.Sharpness(img).enhance(17.0)  # 銳利化
    #
    img = ImageEnhance.Contrast(img).enhance(4.0)  # 增加對比度
    #
    img = img.convert('L')  # 灰度化

    barcodes = pyzbar.decode(img)

    for barcode in barcodes:
        barcodeData = barcode.data.decode("utf-8")
        return barcodeData


if __name__ == '__main__':
    scance()

再來個攝像頭掃二維碼的:

# -*- coding:UTF-8 -*-
import cv2
import xf_scance


def videox():
    vix = cv2.VideoCapture(0)
    while True:
        ret, tu = vix.read()
        cv2.imshow("take_photo", tu)
        cv2.waitKey(1)
        cv2.imwrite("photo.png", tu)
        result = xf_scance.scance()
        if result:
            # print(result)
            break
    vix.release()
    cv2.destroyAllWindows()
    return result


if __name__ == '__main__':
    r = videox()
    print(r)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM