首页 > 编程语言 > 详细

python 人脸识别以及条码识别(快递出库软件)

时间:2021-02-24 23:22:58      阅读:35      评论:0      收藏:0      [点我收藏+]
import csv
import time
import cv2
import pyzbar.pyzbar as pyzbar
from PIL import Image, ImageDraw, ImageFont
import os
import pygame
from playsound import playsound
import threading

#定义自己的线程类
class myThread (threading.Thread):
    def __init__(self, threadID, name, counter):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
        self.counter = counter
    def run(self):
        print ("开始线程:" + self.name)
        face_detect_demo(url)
        print ("退出线程:" + self.name)
# 创建新线程
thread1 = myThread(1, "Thread-1", 1)
# -----------------time----------
time1 = (time.strftime("%Y!%m@%d(%H*%M)%S`", time.localtime()))
time2 = time1.replace(!, )
time3 = time2.replace(@, )
time4 = time3.replace((, )
time5 = time4.replace(*, )
time6 = time5.replace(), )
timenow = time6.replace(`, )
timeTay = (time.strftime("%Y-%m-%d", time.localtime()))
# -----------------time done----
#标致跳出循环
barcodeData1 = ‘‘
#条形码摄像头为0
barCodeCapture = cv2.VideoCapture(0, cv2.CAP_DSHOW)
FaceCapture=cv2.VideoCapture(1, cv2.CAP_DSHOW)
Files = "./logo.txt"  # 新建一个日志,方便查阅(不需要可以删除)
takeAwayUrl=./Util/takeAway.mp3
#是否进行拍照
flag=False
def face_detect_demo(url):
    FaceFlag, FaceFrame = FaceCapture.read()

    # 计数用
    num = 0
    gray = cv2.cvtColor(FaceFrame, cv2.COLOR_BGR2GRAY)
    # 加载特征数据
    face_detector = cv2.CascadeClassifier(
        Util/haarcascade_frontalface_default.xml)
    faces = face_detector.detectMultiScale(gray,scaleFactor=1.88,minNeighbors=1)
    while len(faces) <=0:
        for face in faces:
            x, y, w, h=face
            # print(x, y, w, h)
            if w > 150 and h > 150:
                cv2.rectangle(FaceFrame, (x, y), (x + w, y + h), color=(0, 255, 0), thickness=2)
                img_name="%s/%d.jpg" % (url,num)
                cv2.imwrite(img_name,FaceFrame,[int(cv2.IMWRITE_PNG_COMPRESSION), 9])
                num+=1
                if num>2:
                    break
    # 保存图像,把灰度图片看成二维数组来检测人脸区域
    # (这里是建立了data的文件夹,当然也可以设置为其他路径或者调用数据库)



while (1):
    flag, frame = barCodeCapture.read()
    if not flag:
        break

    test = pyzbar.decode(frame)
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    barcodes = pyzbar.decode(gray)
    for barcode in barcodes:
        (x, y, w, h) = barcode.rect
        cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 255, 0), 2)
        barcodeData = barcode.data.decode("utf-8")
        barcodeType = barcode.type
        if barcodeData == ‘‘ or barcodeData != barcodeData1:
            barcodeData1 = barcodeData
            url=./+timeTay+/ + barcodeData+/
            if not os.path.exists(url):
                os.makedirs(url)
            codeImgUrl = url+ /条码图片.jpg
            # ======================可以不需要,这是在图片上进行标注,里面采用了字体文件==============================
            img_PIL = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
            font = ImageFont.truetype(arialbd.ttf, 25)  # 前面是字体文件,后面是字号
            fillColor = (0, 255, 0)
            position = (x-25, y - 25)
            strl = barcodeData
            draw = ImageDraw.Draw(img_PIL)
            draw.text(position, strl, font=font, fill=fillColor)
            img_PIL.save(codeImgUrl, jpeg)  # 保存一张标记过的图片
            # ====================================================
            #写入日志文件
            with open(Files, a+,encoding=utf-8) as w:
                csv_write = csv.writer(w)
                date = [类型: + barcodeType +   条码: + barcodeData +    时间: + timenow]
                csv_write.writerow(date)

            print("Recognize result>>> type: {0}  content: {1}".format(barcodeType, barcodeData))
            #进行捕获脸部
            # face_detect_demo(FaceFrame,url)
            thread1.start()
            thread1.join()
            print("退出线程")
            # os.system(takeAwayUrl)
            playsound(takeAwayUrl)
        else:
            pass


    cv2.imshow(codeBar, frame)
    # cv2.imshow(‘Face‘, FaceFrame)
    k = cv2.waitKey(1)
    if k == 27:
        break
cv2.destroyAllWindows()
barCodeCapture.release()
FaceCapture.release()

 

python 人脸识别以及条码识别(快递出库软件)

原文:https://www.cnblogs.com/tomcat9/p/14443945.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!