zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    ACL2019对话、问答相关论文整理
    docker for windows添加卷映射
    聊聊多轮任务型对话那些事
    创建用户故事地图(User Story Mapping)的8个步骤
    关于如何做出好的产品
    知识体系整理
    关于如何做好需求的方法
    使用rasa搭建聊天机器人
    【转载】指代消解笔记
    计算机相关会议排名(一)
  • 原文地址:https://www.cnblogs.com/xf1262048067/p/10640050.html
Copyright © 2011-2022 走看看