资源简介

opencv,python,工业反色二维码,自动识别,记录长度不合格数据

资源截图

代码片段和文件信息

“““
这是最新版数二维码实时识别程序,已通过opencv函数实现摄像头颜色翻转和实时扫描
“““
import time
import ctypes
import sys
from cv2 import cv2 as cv2  # 在vscode里面直接import cv2会显示代码有问题,其实是没问题的,这种导入方式可以避免;
import pyzbar.pyzbar as pyzbar
import csv


“““这一部分是用来设置windows下颜色的“““
# 句柄号
STD_OUTPUT_HANDLE = -11
# 错误显示,前景色
FOREGROUND_RED = 0x04  # 红
FOREGROUND_GREEN = 0x02  # 绿
FOREGROUND_BLUE = 0x01  # 蓝
FOREGROUND_INTENSITY = 0x08  # 加亮
# 错误显示,背景色
BACKGROUND_WHITE = 0x47  # 白
BACKGROUND_INTENSITY = 0x80  # 加亮
color_error = FOREGROUND_RED | FOREGROUND_INTENSITY | BACKGROUND_WHITE | BACKGROUND_INTENSITY

std_out_handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)


def set_cmd_color(color handle=std_out_handle):
    bool = ctypes.windll.kernel32.SetConsoleTextAttribute(handle color)
    return bool


def reset_color():
    set_cmd_color(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE)


def print_color_text(color text):
    set_cmd_color(color)
    sys.stdout.write(‘%s\n‘ % text)  # ==> print(text)
    reset_color()


PATH_OK = “OK_record.csv“
found_ok = set()
duration = 2015
freq = 3000
check_num_config_path = “config.txt“  # 此文档为设置监测用字符位数,目前为30可依据需要更改,需要重启程序才可以
cam_config_path = “cam_config.txt“  # 此文档为设置摄像头序号,PC写1,笔记本写2。

with open(check_num_config_path “r“) as f:
    check_data = f.readline()
    print(f“当前数据长度限制为:{check_data}“)

with open(cam_config_path “r“) as l:
    cam_info = l.readline()
    print(f“检测到摄像头配置文件,当前使用摄像头序号为:{cam_info}“)
    print(“摄像头唯一时,建议将该数字设置为1,笔记本建议设置为2“)

check_num = check_data
cam_num = cam_info

PATH_NOK = “NOK_record.csv“
found_nok = set()

capture = cv2.VideoCapture(0 cv2.CAP_DSHOW)


def main():
    while True:
        ret frame = capture.read()  # 从摄像头获取每一帧

        frame_gray = cv2.cvtColor(frame cv2.COLOR_BGR2GRAY)  # 对帧进行灰度化
        ret1 mask = cv2.threshold(frame_gray 175 255 cv2.THRESH_BINARY)  # 对灰度化之后的帧进行二值化
        mask_inv = cv2.bitwise_not(mask)  # 对二值化后的图像取反,直接生成黑白页面

        barcodes = pyzbar.decode(mask_inv)  # 对每一帧进行解码

        for barcode in barcodes:
            barcode_data = barcode.data.decode(“utf-8“)
            if len(barcode_data) != int(check_num):
                # print(f“错误数据**bad_data**:\t{barcode_data}\t字符长度为:{len(barcode_data)}“)
                # print_color_text(color_error f“错误数据**bad_data**:\t{barcode_data}\t字符长度为:{len(barcode_data)}“)
                bad_data = barcode_data
                # winsound.Beep(freq duration)
                if bad_data not in found_nok:
                    with open(PATH_NOK “a+“) as f:
                        csv_write = csv.writer(f)
                        date = [bad_data time.strftime(“%Y-%m-%d %H:%M:%S“ time.localtime()) “长度“ len(barcode_data)]
                        csv_write.writerow(date)
                        print_color_text(color_error f“错误数据**bad_data**:\t{barcode_data}\t字符长度为:{len(barcode_data)}该数据已加入错误记录“)
                    found_nok.add(bad_data)
 

评论

共有 条评论