当前位置:   article > 正文

python基于opencv实现车辆识别人脸识别_python基于opencv实现车辆识别anaconda虚拟环境

python基于opencv实现车辆识别anaconda虚拟环境

需要软件:python(笔主3.7)、pycharm(社区版即可)

需要下载:opencv、pyq5

需要用到的分类器

OpenCV人脸检测分类器 haarcascade_frontalface_default.xml(下载opencv后自带的,可以直接本地搜索)

汽车检测分类器 car.xml下载地址 https://github.com/duyet/opencv-car-detection 

(下不了可留下邮箱我发给你~)

安装opencv 在pycharm下面的终端控制(Terminal)输入 (pyq5后面)

pip install opencv-python 

pip uninstall opencv-contrib-python

    //pip install PyQt5

登录界面 主界面

主页面-左图打开文件 右图灰度处理

 主页面-左图打开文件 右图车辆图片识别

 主页面-车辆视频

  主页面-人脸采集

 主页面-人脸训练(pycharm中)

 主页面-人脸识别(数值越小准确率越高,超过十次小于0.3视为识别成功)

代码部分

登录界面

主要用pyqt5搭建界面用sys实现退出等操作

预存两个用户root和niuniu,因为没有深入学python,否则可以想java和c一样做一个用户管理系统,实现增删改查

self.resize(w,h)是基于背景图片的w和t,自己下载自己调整

self.xxxxBtn.clicked.connect(self.xxxx)绑定事件
  1. import sys
  2. from PyQt5.QtWidgets import *
  3. from PyQt5.QtGui import *
  4. from mainW import mainW
  5. import os
  6. # 登录窗口的定义
  7. class loginW(QWidget):
  8. #构造函数
  9. def __init__(self):
  10. super().__init__()
  11. self.resize(1146,710)
  12. self.setWindowTitle("opencv车流识别系统")
  13. self.setWindowIcon(QIcon("D:/python_work/opencv/img/x_智能.png"))
  14. #设置背景
  15. palette=QPalette()
  16. palette.setBrush(self.backgroundRole(),QBrush(QPixmap("D:/python_work/opencv/img/shou.jpg")))
  17. self.setPalette(palette)
  18. #给窗口添加控件
  19. #控件
  20. self.userLab=QLabel("用户名:",self)
  21. self.userLab.setGeometry(30,300,70,30)#x,y,w,h
  22. self.userLab.setStyleSheet("color:blue")
  23. self.pwdLab = QLabel("密 码:", self)
  24. self.pwdLab.setGeometry(30, 340, 70, 30) # x,y,w,h
  25. self.pwdLab.setStyleSheet("color:blue")
  26. #编辑框
  27. self.userEdit=QLineEdit(self)
  28. self.userEdit.setGeometry(90,300,130,30)
  29. self.pwdEdit = QLineEdit(self)
  30. self.pwdEdit.setGeometry(90, 340, 130, 30)
  31. self.pwdEdit.setEchoMode(QLineEdit.Password)
  32. #按钮
  33. self.loginBtr=QPushButton("登录",self)
  34. self.loginBtr.setGeometry(30,400,100,30)
  35. self.quitBtr = QPushButton("退出", self)
  36. self.quitBtr.setGeometry(150, 400, 100, 30)
  37. #给按钮挂链接
  38. self.loginBtr.clicked.connect(self.login)
  39. self.quitBtr.clicked.connect(self.quit)
  40. self.userslist = [["root", "123456"], ["niuniu", "123456"]]
  41. def login(self):
  42. #登录事件
  43. print("login")
  44. userName=self.userEdit.text()
  45. userPwd=self.pwdEdit.text()#获取输入框的数据
  46. for (name, pwd) in self.userslist:
  47. if (userName == name and userPwd == pwd):
  48. print("登录成功")
  49. QMessageBox.about(self,"提示框","登录成功")
  50. os.system("start python mainW.py")
  51. sys.exit()
  52. break
  53. else:
  54. print("登录失败")
  55. QMessageBox.about(self, "提示框", "登录失败")
  56. break
  57. def quit(self):
  58. sys.exit()
  59. if __name__=="__main__":
  60. app=QApplication(sys.argv) #实例化QApplication应用程序对象
  61. loginWin=loginW()#实例化一个登录窗
  62. lt=mainW()
  63. loginWin.show()#显示窗口
  64. sys.exit(app.exec_())

主界面

主界面mainW代码

没用上

cap.release()
cv2.desstoryAllWindows()

里面摁ESC退出或人脸采集满300张(自定)会卡屏,点右上角x退出

里面文件的位置自己diy

  1. import os
  2. import sys
  3. import cv2
  4. import numpy as np
  5. from PyQt5.QtWidgets import *
  6. from PyQt5.QtGui import *
  7. class mainW(QWidget):
  8. def __init__(self):
  9. super().__init__()
  10. self.resize(900,600)
  11. self.setWindowTitle("opencv车流识别系统")
  12. self.setWindowIcon(QIcon("D:/python_work/opencv/img/x_智能.png"))
  13. self.openFileBtn=QPushButton("打开文件",self)
  14. self.openFileBtn.setGeometry(20,20,100,30)
  15. self.imgCheckBtn=QPushButton("车辆图片识别",self)
  16. self.imgCheckBtn.setGeometry(260,20,120,30)
  17. self.videoCheckBtn=QPushButton("车辆视频",self)
  18. self.videoCheckBtn.setGeometry(400,20,100,30)
  19. self.collectFaceBtn = QPushButton("人脸采集", self)
  20. self.collectFaceBtn.setGeometry(520, 20, 100, 30)
  21. self.trainFaceBtn = QPushButton("人脸训练", self)
  22. self.trainFaceBtn.setGeometry(640, 20, 100, 30)
  23. self.checkFaceBtn = QPushButton("人脸识别", self)
  24. self.checkFaceBtn.setGeometry(760, 20, 100, 30)
  25. self.grabBtn=QPushButton("灰度处理",self)
  26. self.grabBtn.setGeometry(140,20,100,30)
  27. self.leftLab=QLabel("原图",self)
  28. self.leftLab.setGeometry(20,80,400,400)
  29. self.leftLab.setStyleSheet("background-color:white")
  30. self.rightLab = QLabel("新图", self)
  31. self.rightLab.setGeometry(440, 80, 400, 400)
  32. self.rightLab.setStyleSheet("background-color:white")
  33. self.openFileBtn.clicked.connect(self.openFile)
  34. self.grabBtn.clicked.connect(self.grayImg)
  35. self.imgCheckBtn.clicked.connect(self.imgCheck)
  36. self.videoCheckBtn.clicked.connect(self.videoCheck)
  37. self.collectFaceBtn.clicked.connect(self.collectFace)
  38. self.trainFaceBtn.clicked.connect(self.trainFace)
  39. self.checkFaceBtn.clicked.connect(self.checkFace)
  40. def openFile(self):
  41. #打开文件函数
  42. print("打开文件")
  43. self.img,imgType=QFileDialog.getOpenFileNames(self,"打开文件","","*.jpg;;*.png")#打开文件的弹窗
  44. self.s="".join(self.img)#生产正确路径
  45. self.leftLab.setPixmap(QPixmap(self.s))#s是路径
  46. self.leftLab.setScaledContents(True)#缩放
  47. def grayImg(self):
  48. #图片灰度处理
  49. print("图片灰度处理")
  50. img=cv2.imread(self.s)
  51. print(img)
  52. #灰度处理函数
  53. img_gray=cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
  54. print(img_gray)
  55. newImg="D:/python_work/venv/opencv1/img/gray1.jpg"
  56. cv2.imwrite(newImg,img_gray)#路径,图片
  57. print(newImg)
  58. self.rightLab.setPixmap(QPixmap(newImg)) # s是路径
  59. self.rightLab.setScaledContents(True) # 缩放
  60. def imgCheck(self):
  61. #车辆识别
  62. print("车辆识别")
  63. #灰度处理
  64. img=cv2.imread(self.s)
  65. img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
  66. #识别车辆
  67. car_detector=cv2.CascadeClassifier("D:/python_work/opencv/cars.xml")
  68. cars=car_detector.detectMultiScale(img_gray,1.1,1,cv2.CASCADE_SCALE_IMAGE,(50,50),(150,150))
  69. print(cars)
  70. #圈出车辆
  71. for (x,y,w,h) in cars:
  72. cv2.rectangle(img,(x,y),(x+w,y+h),(255,255,0),2)
  73. #保存+显示图片
  74. newImg = "D:/python_work/venv/opencv1/img/gray4.jpg"
  75. cv2.imwrite(newImg, img) # 路径,图片
  76. self.rightLab.setPixmap(QPixmap(newImg)) # s是路径
  77. self.rightLab.setScaledContents(True) # 缩放
  78. def videoCheck(self):
  79. #车辆识别
  80. print("打开车流视频")
  81. self.video,videoType=QFileDialog.getOpenFileNames(self,"打开视频","","*.mp4")
  82. self.v = "".join(self.video) # 生产正确路径
  83. cap=cv2.VideoCapture(self.v)#加载视频
  84. print(cap)
  85. #加载级联分类器
  86. car_detector=cv2.CascadeClassifier("D:/python_work/opencv/cars.xml")
  87. while True:
  88. status, img = cap.read() # 只读取视频的一帧数据
  89. if status:
  90. #灰度处理
  91. img_gray=cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
  92. #检测车辆目标
  93. cars=car_detector.detectMultiScale(img_gray,1.1,2,cv2.CASCADE_SCALE_IMAGE,(40,40),(120,120))
  94. #把车框出来
  95. for (x, y, w, h) in cars:
  96. cv2.rectangle(img, (x, y), (x + w, y + h), (255, 255, 0),2,cv2.LINE_AA)
  97. string="real time traffic flow:"+str(len(cars))
  98. #检测当下是几辆车
  99. cv2.putText(img,string,(50,50),cv2.FONT_HERSHEY_SIMPLEX,1,(255,0,255))
  100. #显示
  101. cv2.imshow("opencv(ESC-quit)",img)
  102. else:
  103. break
  104. key=cv2.waitKey(10)#返回键盘的键值
  105. if key==27: #ESC键 退出键 键值27
  106. break
  107. #cap.release()
  108. #cv2.desstoryAllWindows()
  109. def collectFace(self):
  110. print("人脸识别")
  111. #打开摄像头
  112. cap=cv2.VideoCapture(0)
  113. face_detector=cv2.CascadeClassifier("D:/python_work/opencv/haarcascade_frontalface_default.xml")
  114. i=1
  115. while True:
  116. status,img=cap.read()
  117. if status:
  118. img_gray=cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
  119. #识别人脸
  120. faces=face_detector.detectMultiScale(img_gray,1.1,2,cv2.CASCADE_SCALE_IMAGE,(200,200),(350,350))
  121. #把车框出来
  122. for (x, y, w, h) in faces:
  123. cv2.rectangle(img, (x, y), (x + w, y + h), (255, 255, 0), 2, cv2.LINE_AA)
  124. filename="./face_img/chen{}.jpg".format(i)
  125. cv2.imwrite(filename,img_gray[y:y+h,x:w+x])
  126. i=i+1
  127. cv2.imshow("opencv(ESC-quit)",img)
  128. else:
  129. break
  130. if i>300:
  131. break
  132. key=cv2.waitKey(2)
  133. if key==27:
  134. break
  135. #cap.release()
  136. #cv2.desstoryAllWindows()
  137. def trainFace(self):
  138. print("识别训练")
  139. path="./face_img/"
  140. recognizer= cv2.face.LBPHFaceRecognizer_create()#创建人脸识别器
  141. facedata=[]#储存人脸像素数据集合
  142. ids=[]
  143. file_list=os.listdir(path)#打开某个目录 返回路径下的所有文件名称
  144. for file in file_list:
  145. img=cv2.imread(path+file)
  146. img_gray=cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
  147. print(img_gray)
  148. facedata.append(img_gray)
  149. ids.append(0)
  150. recognizer.train(facedata,np.array(ids))
  151. recognizer.write("./train.yml")
  152. print("训练完毕")
  153. def checkFace(self):
  154. print("识别项目")
  155. cap=cv2.VideoCapture(0)
  156. face_detector=cv2.CascadeClassifier("D:/python_work/opencv/haarcascade_frontalface_default.xml")
  157. recognizer=cv2.face.LBPHFaceRecognizer_create()
  158. recognizer.read("./train.yml")
  159. count = 0
  160. while True:
  161. status, img = cap.read()
  162. if status:
  163. img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
  164. # 识别人脸
  165. faces = face_detector.detectMultiScale(img_gray, 1.1, 2, cv2.CASCADE_SCALE_IMAGE, (200, 200),
  166. (350, 350))
  167. # 把车框出来
  168. for (x, y, w, h) in faces:
  169. cv2.rectangle(img, (x, y), (x + w, y + h), (255, 255, 0), 2)
  170. user_id,confidence=recognizer.predict(img_gray[y:y+h,x:x+w])#识别器准确率
  171. print(user_id,confidence)
  172. chance=round(100-confidence)
  173. if chance>70 : #后续改!
  174. count+=1
  175. cv2.imshow("opencv(ESC-quit)", img)
  176. else:
  177. break
  178. if count>10:
  179. print("识别成功")
  180. break
  181. key = cv2.waitKey(2)
  182. if key == 27:
  183. break
  184. # cap.release()
  185. # cv2.desstoryAllWindows()
  186. # cv2.waitKey(1)
  187. if __name__=="__main__":
  188. app=QApplication(sys.argv)
  189. mainWin=mainW()
  190. mainWin.show()
  191. sys.exit(app.exec_())

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/708824
推荐阅读
相关标签
  

闽ICP备14008679号