树莓派基于分类器的识别环保标志(五)

本文介绍了使用树莓派进行实时环保标志检测的项目。通过加载预训练的分类器,对视频流进行处理,检测到人脸和特定标志,并通过TCP连接将检测结果发送到服务器。利用了OpenCV库进行图像处理,包括灰度转换、人脸识别和标志检测,以及使用socket进行数据传输。

我们之前搞到了xml文件,这里不想多说咧,直接啪嗒啪嗒,上代码

coding:utf-8

import sys
reload(sys)
sys.setdefaultencoding('utf8')
#    __author__ = 'F S'
#    __date__ = '2018/7/28'
#    __Desc__ = 人脸检测小例子,以圆圈圈出人脸
#import cv2.cv as cv 
import cv2 
import numpy as np
import socket   
import time
import sy
s


from PIL import Image

from cv2 import VideoCapture 
cap = cv2.VideoCapture(0)
by
cap.set(3,320)# set Width
cap.set(4,240)# set Height
    
SERVER_IP = "192.168.4.1"
SERVER_PORT = 8888
 
print("Starting socket: TCP...")
server_addr = (SERVER_IP, SERVER_PORT)
socket_tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

print("Starting socket: TCP...")
server_addr = (SERVER_IP, SERVER_PORT)
socket_tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 待检测的图片路径
face_cascade = cv2.CascadeClassifier(r'/home/pi/Desktop/opencv-master/data/haarcascades_cuda/haarcascade_frontalface_alt.xml')
signal_cascade = cv2.CascadeClassifier(r'/home/pi/Desktop/cascade.xml')

while True:  
    try:
        print("Connecting to server @ %s:%d..." %(SERVER_IP, SERVER_PORT))
        socket_tcp.connect(server_addr)  
        break  
    except Exception:
        print("Can't connect to server, try it latter!")
        time.sleep(1)
        continue  
print("Receiving package...")  
while (True) :
    ret,frame = cap.read()    
    frame = cv2.flip(frame,-1)# Flip camera vertically    
    gray=frame    
    #gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    # 探测图片中的人脸
    faces = face_cascade.detectMultiScale(
        gray,
        scaleFactor = 1.20,
        minNeighbors = 4,
        minSize = (4,4),
        flags = 0
    )a
    signs = signal_cascade.detectMultiScale(
        gray,
        scaleFactor = 1.20,
        minNeighbors = 4,
        minSize = (4,4),
        flags = 0
    )
    if len(faces) > 0:
      print "发现{0}个人脸!".format(len(faces))
      try:  
        if len(faces) == 1 :  sa   
                socket_tcp.send("FROLEF")
            elif len(faces) == 2 :
             socket_tcp.send("BACKWA")
        else :
            print("WRONGG")
            time.sleep(1)
      except Exception:  
        socket_tcp.close()
        socket_tcp = None
        sys.exit(1)
    if len(signs) > 0:
      print "发现{0}个signs!".format(len(signs))
      try:  
        if len(signs) == 1 :     
                socket_tcp.send("THREEE")
        else :
            print("WRONGg")
            time.sleep(1) 
      except Exception:  
        socket_tcp.close()
        socket_tcp = None
            sys.exit(1)     
    
    for(x,y,w,h) in faces:
        # cv2.rectangle(gray,(x,y),(x+w,y+w),(0,255,0),2)
        #if  w > 50 and h > 50 :
          cv2.circle(gray,((x+x+w)/2,(y+y+h)/2),w/2,(0,255,0),2)
          print x,y,w,h
    for(x,y,w,h) in signs:
        # cv2.rectangle(gray,(x,y),(x+w,y+w),(0,255,0),2)
        #if  w > 50 and h > 50 :
          cv2.circle(gray,((x+x+w)/2,(y+y+h)/2),w/2,(0,255,0),2)
          print x,y,w,h
    cv2.imshow("Find Faces!",gray)
    k = cv2.waitKey(30)     
    if k ==27:# press 'ESC' to quit    
         break
cap.release()
cv2.destroyAllWindows()
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值