Python+OpenCv实现AI人脸识别身份认证系统(2)——人脸数据采集、存储

Python+OpenCv实现AI人脸识别身份认证系统(2)——人脸数据采集、存储

目录

实现原理

实施步骤

实现程序


了解人脸检测、识别的原理后,让我们开始人脸识别系统的设计吧~

首先展示下数据采集、存储的界面设计:

Python+OpenCv实现AI人脸识别身份认证系统(2)——人脸数据采集、存储_第1张图片

  • 实现原理

 数据采集、存储实现原理:使用OpenCv检测用户人脸(支持内置、外置摄像头两种模式),检测到人脸信息后即可采集人来数据,填写用户信息,将采集到的数据集存储到数据库中。

  • 实施步骤

第一步:添加用户信息,稍后和采集的图像数据绑定,并存储到数据库:

Python+OpenCv实现AI人脸识别身份认证系统(2)——人脸数据采集、存储_第2张图片

第二步:人脸采集数据(注意需要开启人脸检测,仅采集人脸,避免采集过多无用信息): 

Python+OpenCv实现AI人脸识别身份认证系统(2)——人脸数据采集、存储_第3张图片

可以看一下采集到的灰度图像(采集RGB彩色图像,内存大,训练消耗更多时间,并且对人脸识别的准确性无太大的提升):

Python+OpenCv实现AI人脸识别身份认证系统(2)——人脸数据采集、存储_第4张图片

第三步:结束人脸数据采集:

Python+OpenCv实现AI人脸识别身份认证系统(2)——人脸数据采集、存储_第5张图片

 第四步:同步到数据库:

Python+OpenCv实现AI人脸识别身份认证系统(2)——人脸数据采集、存储_第6张图片

  • 实现程序

现在呈现上实现Demo,注释十分详细了,不再讲解,小伙伴们可以看看~


   
   
   
   
  1. #!/usr/bin/env python3
  2. #CSDN:https://blog.csdn.net/m0_38106923
  3. #邮箱:[email protected]
  4. import cv2
  5. from PyQt5.QtCore import QTimer, QRegExp, pyqtSignal
  6. from PyQt5.QtGui import QImage, QPixmap, QIcon, QRegExpValidator, QTextCursor
  7. from PyQt5.QtWidgets import QDialog, QApplication, QWidget, QMessageBox
  8. from PyQt5.uic import loadUi
  9. import logging
  10. import logging.config
  11. import queue
  12. import threading
  13. import sqlite3
  14. import os
  15. import sys
  16. from datetime import datetime
  17. # 用户取消了更新数据库操作
  18. class OperationCancel(Exception):
  19. pass
  20. # 采集过程中出现干扰
  21. class RecordDisturbance(Exception):
  22. pass
  23. class DataRecordUI(QWidget):
  24. receiveLogSignal = pyqtSignal(str)
  25. def __init__(self):
  26. super(DataRecordUI, self).__init__()
  27. loadUi( './ui/DataRecord.ui', self)
  28. self.setWindowIcon(QIcon( './icons/icon.png'))
  29. self.setFixedSize( 1011, 601)
  30. # OpenCV
  31. self.cap = cv2.VideoCapture()
  32. self.faceCascade = cv2.CascadeClassifier( './haarcascades/haarcascade_frontalface_default.xml')
  33. self.logQueue = queue.Queue() # 日志队列
  34. # 图像捕获
  35. self.isExternalCameraUsed = False
  36. self.useExternalCameraCheckBox.stateChanged.connect(
  37. lambda: self.useExternalCamera(self.useExternalCameraCheckBox))
  38. self.startWebcamButton.toggled.connect(self.startWebcam)
  39. self.startWebcamButton.setCheckable( True)
  40. # 定时器
  41. self.timer = QTimer(self)
  42. self.timer.timeout.connect(self.updateFrame)
  43. # 人脸检测
  44. self.isFaceDetectEnabled = False
  45. self.enableFaceDetectButton.toggled.connect(self.enableFaceDetect)
  46. self.enableFaceDetectButton.setCheckable( True)
  47. # 数据库
  48. self.database = './FaceBase.db'
  49. self.datasets = './datasets'
  50. self.isDbReady = False
  51. self.initDbButton.setIcon(QIcon( './icons/warning.png'))
  52. self.initDbButton.clicked.connect(self.initDb)
  53. # 用户信息
  54. self.isUserInfoReady = False
  55. self.userInfo = { 'stu_id': '', 'cn_name': '', 'en_name': ''}
  56. self.addOrUpdateUserInfoButton.clicked.connect(self.addOrUpdateUserInfo)
  57. self.migrateToDbButton.clicked.connect(self.migrateToDb)
  58. # 人脸采集
  59. self.startFaceRecordButton.clicked.connect( lambda: self.startFaceRecord(self.startFaceRecordButton))
  60. # self.startFaceRecordButton.setCheckable(True)
  61. self.faceRecordCount = 0
  62. self.minFaceRecordCount = 100
  63. self.isFaceDataReady = False
  64. self.isFaceRecordEnabled = False
  65. self.enableFaceRecordButton.clicked.connect(self.enableFaceRecord)
  66. # 日志系统
  67. self.receiveLogSignal.connect( lambda log: self.logOutput(log))
  68. self.logOutputThread = threading.Thread(target=self.receiveLog, daemon= True)
  69. self.logOutputThread.start()
  70. # 是否使用外接摄像头
  71. def useExternalCamera(self, useExternalCameraCheckBox):
  72. if useExternalCameraCheckBox.isChecked():
  73. self.isExternalCameraUsed = True
  74. else:
  75. self.isExternalCameraUsed = False
  76. # 打开/关闭摄像头
  77. def startWebcam(self, status):
  78. if status:
  79. if self.isExternalCameraUsed:
  80. camID = 1
  81. else:
  82. camID = 0
  83. self.cap.open(camID)
  84. self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
  85. self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
  86. ret, frame = self.cap.read()
  87. if not ret:
  88. logging.error( '无法调用电脑摄像头{}'.format(camID))
  89. self.logQueue.put( 'Error:初始化摄像头失败')
  90. self.cap.release()
  91. self.startWebcamButton.setIcon(QIcon( './icons/error.png'))
  92. self.startWebcamButton.setChecked( False)
  93. else:
  94. self.startWebcamButton.setText( '关闭摄像头')
  95. self.enableFaceDetectButton.setEnabled( True)
  96. self.timer.start( 5)
  97. self.startWebcamButton.setIcon(QIcon( './icons/success.png'))
  98. else:
  99. if self.cap.isOpened():
  100. if self.timer.isActive():
  101. self.timer.stop()
  102. self.cap.release()
  103. self.faceDetectCaptureLabel.clear()
  104. self.faceDetectCaptureLabel.setText( '摄像头未开启')
  105. self.startWebcamButton.setText( '打开摄像头')
  106. self.enableFaceDetectButton.setEnabled( False)
  107. self.startWebcamButton.setIcon(QIcon())
  108. # 开启/关闭人脸检测
  109. def enableFaceDetect(self, status):
  110. if self.cap.isOpened():
  111. if status:
  112. self.enableFaceDetectButton.setText( '关闭人脸检测')
  113. self.isFaceDetectEnabled = True
  114. else:
  115. self.enableFaceDetectButton.setText( '开启人脸检测')
  116. self.isFaceDetectEnabled = False
  117. # 采集当前捕获帧
  118. def enableFaceRecord(self):
  119. if not self.isFaceRecordEnabled:
  120. self.isFaceRecordEnabled = True
  121. # 开始/结束采集人脸数据
  122. def startFaceRecord(self, startFaceRecordButton):
  123. if startFaceRecordButton.text() == '开始采集人脸数据':
  124. if self.isFaceDetectEnabled:
  125. if self.isUserInfoReady:
  126. self.addOrUpdateUserInfoButton.setEnabled( False)
  127. if not self.enableFaceRecordButton.isEnabled():
  128. self.enableFaceRecordButton.setEnabled( True)
  129. self.enableFaceRecordButton.setIcon(QIcon())
  130. self.startFaceRecordButton.setIcon(QIcon( './icons/success.png'))
  131. self.startFaceRecordButton.setText( '结束当前人脸采集')
  132. else:
  133. self.startFaceRecordButton.setIcon(QIcon( './icons/error.png'))
  134. self.startFaceRecordButton.setChecked( False)
  135. self.logQueue.put( 'Error:操作失败,系统未检测到有效的用户信息')
  136. else:
  137. self.startFaceRecordButton.setIcon(QIcon( './icons/error.png'))
  138. self.logQueue.put( 'Error:操作失败,请开启人脸检测')
  139. else:
  140. if self.faceRecordCount < self.minFaceRecordCount:
  141. text = '系统当前采集了 {} 帧图像,采集数据过少会导致较大的识别误差。'.format(self.faceRecordCount)
  142. informativeText = '请至少采集 {} 帧图像。'.format(self.minFaceRecordCount)
  143. DataRecordUI.callDialog(QMessageBox.Information, text, informativeText, QMessageBox.Ok)
  144. else:
  145. text = '系统当前采集了 {} 帧图像,继续采集可以提高识别准确率。'.format(self.faceRecordCount)
  146. informativeText = '你确定结束当前人脸采集吗?'
  147. ret = DataRecordUI.callDialog(QMessageBox.Question, text, informativeText,
  148. QMessageBox.Yes | QMessageBox.No,
  149. QMessageBox.No)
  150. if ret == QMessageBox.Yes:
  151. self.isFaceDataReady = True
  152. if self.isFaceRecordEnabled:
  153. self.isFaceRecordEnabled = False
  154. self.enableFaceRecordButton.setEnabled( False)
  155. self.enableFaceRecordButton.setIcon(QIcon())
  156. self.startFaceRecordButton.setText( '开始采集人脸数据')
  157. self.startFaceRecordButton.setEnabled( False)
  158. self.startFaceRecordButton.setIcon(QIcon())
  159. self.migrateToDbButton.setEnabled( True)
  160. # 定时器,实时更新画面
  161. def updateFrame(self):
  162. ret, frame = self.cap.read()
  163. # self.image = cv2.flip(self.image, 1)
  164. if ret:
  165. self.displayImage(frame)
  166. if self.isFaceDetectEnabled:
  167. detected_frame = self.detectFace(frame)
  168. self.displayImage(detected_frame)
  169. else:
  170. self.displayImage(frame)
  171. # 检测人脸
  172. def detectFace(self, frame):
  173. gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
  174. faces = self.faceCascade.detectMultiScale(gray, 1.3, 5, minSize=( 90, 90))
  175. stu_id = self.userInfo.get( 'stu_id')
  176. for (x, y, w, h) in faces:
  177. if self.isFaceRecordEnabled:
  178. try:
  179. if not os.path.exists( '{}/stu_{}'.format(self.datasets, stu_id)):
  180. os.makedirs( '{}/stu_{}'.format(self.datasets, stu_id))
  181. if len(faces) > 1:
  182. raise RecordDisturbance
  183. cv2.imwrite( '{}/stu_{}/img.{}.jpg'.format(self.datasets, stu_id, self.faceRecordCount + 1),
  184. gray[y - 20:y + h + 20, x - 20:x + w + 20])
  185. except RecordDisturbance:
  186. self.isFaceRecordEnabled = False
  187. logging.error( '检测到多张人脸或环境干扰')
  188. self.logQueue.put( 'Warning:检测到多张人脸或环境干扰,请解决问题后继续')
  189. self.enableFaceRecordButton.setIcon(QIcon( './icons/warning.png'))
  190. continue
  191. except Exception as e:
  192. logging.error( '写入人脸图像文件到计算机过程中发生异常')
  193. self.enableFaceRecordButton.setIcon(QIcon( './icons/error.png'))
  194. self.logQueue.put( 'Error:无法保存人脸图像,采集当前捕获帧失败')
  195. else:
  196. self.enableFaceRecordButton.setIcon(QIcon( './icons/success.png'))
  197. self.faceRecordCount = self.faceRecordCount + 1
  198. if self.faceRecordCount > 100:
  199. self.isFaceRecordEnabled = False
  200. self.faceRecordCountLcdNum.display(self.faceRecordCount)
  201. cv2.rectangle(frame, (x - 5, y - 10), (x + w + 5, y + h + 10), ( 0, 0, 255), 2)
  202. return frame
  203. # 显示图像
  204. def displayImage(self, img):
  205. # BGR -> RGB
  206. img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
  207. # default:The image is stored using 8-bit indexes into a colormap, for example:a gray image
  208. qformat = QImage.Format_Indexed8
  209. if len(img.shape) == 3: # rows[0], cols[1], channels[2]
  210. if img.shape[ 2] == 4:
  211. # The image is stored using a 32-bit byte-ordered RGBA format (8-8-8-8)
  212. # A: alpha channel,不透明度参数。如果一个像素的alpha通道数值为0%,那它就是完全透明的
  213. qformat = QImage.Format_RGBA8888
  214. else:
  215. qformat = QImage.Format_RGB888
  216. # img.shape[1]:图像宽度width,img.shape[0]:图像高度height,img.shape[2]:图像通道数
  217. # QImage.__init__ (self, bytes data, int width, int height, int bytesPerLine, Format format)
  218. # 从内存缓冲流获取img数据构造QImage类
  219. # img.strides[0]:每行的字节数(width*3),rgb为3,rgba为4
  220. # strides[0]为最外层(即一个二维数组所占的字节长度),strides[1]为次外层(即一维数组所占字节长度),strides[2]为最内层(即一个元素所占字节长度)
  221. # 从里往外看,strides[2]为1个字节长度(uint8),strides[1]为3*1个字节长度(3即rgb 3个通道)
  222. # strides[0]为width*3个字节长度,width代表一行有几个像素
  223. outImage = QImage(img, img.shape[ 1], img.shape[ 0], img.strides[ 0], qformat)
  224. self.faceDetectCaptureLabel.setPixmap(QPixmap.fromImage(outImage))
  225. self.faceDetectCaptureLabel.setScaledContents( True)
  226. # 初始化数据库
  227. def initDb(self):
  228. conn = sqlite3.connect(self.database)
  229. cursor = conn.cursor()
  230. try:
  231. # 检测人脸数据目录是否存在,不存在则创建
  232. if not os.path.isdir(self.datasets):
  233. os.makedirs(self.datasets)
  234. # 查询数据表是否存在,不存在则创建
  235. cursor.execute( '''CREATE TABLE IF NOT EXISTS users (
  236. stu_id VARCHAR(12) PRIMARY KEY NOT NULL,
  237. face_id INTEGER DEFAULT -1,
  238. cn_name VARCHAR(10) NOT NULL,
  239. en_name VARCHAR(16) NOT NULL,
  240. created_time DATE DEFAULT (date('now','localtime'))
  241. )
  242. ''')
  243. # 查询数据表记录数
  244. cursor.execute( 'SELECT Count(*) FROM users')
  245. result = cursor.fetchone()
  246. dbUserCount = result[ 0]
  247. except Exception as e:
  248. logging.error( '读取数据库异常,无法完成数据库初始化')
  249. self.isDbReady = False
  250. self.initDbButton.setIcon(QIcon( './icons/error.png'))
  251. self.logQueue.put( 'Error:初始化数据库失败')
  252. else:
  253. self.isDbReady = True
  254. self.dbUserCountLcdNum.display(dbUserCount)
  255. self.logQueue.put( 'Success:数据库初始化完成')
  256. self.initDbButton.setIcon(QIcon( './icons/success.png'))
  257. self.initDbButton.setEnabled( False)
  258. self.addOrUpdateUserInfoButton.setEnabled( True)
  259. finally:
  260. cursor.close()
  261. conn.commit()
  262. conn.close()
  263. # 增加/修改用户信息
  264. def addOrUpdateUserInfo(self):
  265. self.userInfoDialog = UserInfoDialog()
  266. stu_id, cn_name, en_name = self.userInfo.get( 'stu_id'), self.userInfo.get( 'cn_name'), self.userInfo.get(
  267. 'en_name')
  268. self.userInfoDialog.stuIDLineEdit.setText(stu_id)
  269. self.userInfoDialog.cnNameLineEdit.setText(cn_name)
  270. self.userInfoDialog.enNameLineEdit.setText(en_name)
  271. self.userInfoDialog.okButton.clicked.connect(self.checkToApplyUserInfo)
  272. self.userInfoDialog.exec()
  273. # 校验用户信息并提交
  274. def checkToApplyUserInfo(self):
  275. if not (self.userInfoDialog.stuIDLineEdit.hasAcceptableInput() and
  276. self.userInfoDialog.cnNameLineEdit.hasAcceptableInput() and
  277. self.userInfoDialog.enNameLineEdit.hasAcceptableInput()):
  278. self.userInfoDialog.msgLabel.setText( '你的输入有误,提交失败,请检查并重试!')
  279. else:
  280. # 获取用户输入
  281. self.userInfo[ 'stu_id'] = self.userInfoDialog.stuIDLineEdit.text().strip()
  282. self.userInfo[ 'cn_name'] = self.userInfoDialog.cnNameLineEdit.text().strip()
  283. self.userInfo[ 'en_name'] = self.userInfoDialog.enNameLineEdit.text().strip()
  284. # 信息确认
  285. stu_id, cn_name, en_name = self.userInfo.get( 'stu_id'), self.userInfo.get( 'cn_name'), self.userInfo.get(
  286. 'en_name')
  287. self.stuIDLineEdit.setText(stu_id)
  288. self.cnNameLineEdit.setText(cn_name)
  289. self.enNameLineEdit.setText(en_name)
  290. self.isUserInfoReady = True
  291. if not self.startFaceRecordButton.isEnabled():
  292. self.startFaceRecordButton.setEnabled( True)
  293. self.migrateToDbButton.setIcon(QIcon())
  294. # 关闭对话框
  295. self.userInfoDialog.close()
  296. # 同步用户信息到数据库
  297. def migrateToDb(self):
  298. if self.isFaceDataReady:
  299. stu_id, cn_name, en_name = self.userInfo.get( 'stu_id'), self.userInfo.get( 'cn_name'), self.userInfo.get(
  300. 'en_name')
  301. conn = sqlite3.connect(self.database)
  302. cursor = conn.cursor()
  303. try:
  304. cursor.execute( 'SELECT * FROM users WHERE stu_id=?', (stu_id,))
  305. if cursor.fetchall():
  306. text = '数据库已存在学号为 {} 的用户记录。'.format(stu_id)
  307. informativeText = '是否覆盖?'
  308. ret = DataRecordUI.callDialog(QMessageBox.Warning, text, informativeText,
  309. QMessageBox.Yes | QMessageBox.No)
  310. if ret == QMessageBox.Yes:
  311. # 更新已有记录
  312. cursor.execute( 'UPDATE users SET cn_name=?, en_name=? WHERE stu_id=?',
  313. (cn_name, en_name, stu_id,))
  314. else:
  315. raise OperationCancel # 记录取消覆盖操作
  316. else:
  317. # 插入新记录
  318. cursor.execute( 'INSERT INTO users (stu_id, cn_name, en_name) VALUES (?, ?, ?)',
  319. (stu_id, cn_name, en_name,))
  320. cursor.execute( 'SELECT Count(*) FROM users')
  321. result = cursor.fetchone()
  322. dbUserCount = result[ 0]
  323. except OperationCancel:
  324. pass
  325. except Exception as e:
  326. logging.error( '读写数据库异常,无法向数据库插入/更新记录')
  327. self.migrateToDbButton.setIcon(QIcon( './icons/error.png'))
  328. self.logQueue.put( 'Error:读写数据库异常,同步失败')
  329. else:
  330. text = '{} 已添加/更新到数据库。'.format(stu_id)
  331. informativeText = '{} 的人脸数据采集已完成!'.format(cn_name)
  332. DataRecordUI.callDialog(QMessageBox.Information, text, informativeText, QMessageBox.Ok)
  333. # 清空用户信息缓存
  334. for key in self.userInfo.keys():
  335. self.userInfo[key] = ''
  336. self.isUserInfoReady = False
  337. self.faceRecordCount = 0
  338. self.isFaceDataReady = False
  339. self.faceRecordCountLcdNum.display(self.faceRecordCount)
  340. self.dbUserCountLcdNum.display(dbUserCount)
  341. # 清空历史输入
  342. self.stuIDLineEdit.clear()
  343. self.cnNameLineEdit.clear()
  344. self.enNameLineEdit.clear()
  345. self.migrateToDbButton.setIcon(QIcon( './icons/success.png'))
  346. # 允许继续增加新用户
  347. self.addOrUpdateUserInfoButton.setEnabled( True)
  348. self.migrateToDbButton.setEnabled( False)
  349. finally:
  350. cursor.close()
  351. conn.commit()
  352. conn.close()
  353. else:
  354. self.logQueue.put( 'Error:操作失败,你尚未完成人脸数据采集')
  355. self.migrateToDbButton.setIcon(QIcon( './icons/error.png'))
  356. # 系统日志服务常驻,接收并处理系统日志
  357. def receiveLog(self):
  358. while True:
  359. data = self.logQueue.get()
  360. if data:
  361. self.receiveLogSignal.emit(data)
  362. else:
  363. continue
  364. # LOG输出
  365. def logOutput(self, log):
  366. # 获取当前系统时间
  367. time = datetime.now().strftime( '[%Y/%m/%d %H:%M:%S]')
  368. log = time + ' ' + log + '\n'
  369. self.logTextEdit.moveCursor(QTextCursor.End)
  370. self.logTextEdit.insertPlainText(log)
  371. self.logTextEdit.ensureCursorVisible() # 自动滚屏
  372. # 系统对话框
  373. @staticmethod
  374. def callDialog(icon, text, informativeText, standardButtons, defaultButton=None):
  375. msg = QMessageBox()
  376. msg.setWindowIcon(QIcon( './icons/icon.png'))
  377. msg.setWindowTitle( 'OpenCV Face Recognition System - DataRecord')
  378. msg.setIcon(icon)
  379. msg.setText(text)
  380. msg.setInformativeText(informativeText)
  381. msg.setStandardButtons(standardButtons)
  382. if defaultButton:
  383. msg.setDefaultButton(defaultButton)
  384. return msg.exec()
  385. # 窗口关闭事件,关闭定时器、摄像头
  386. def closeEvent(self, event):
  387. if self.timer.isActive():
  388. self.timer.stop()
  389. if self.cap.isOpened():
  390. self.cap.release()
  391. event.accept()
  392. # 用户信息填写对话框
  393. class UserInfoDialog(QDialog):
  394. def __init__(self):
  395. super(UserInfoDialog, self).__init__()
  396. loadUi( './ui/UserInfoDialog.ui', self)
  397. self.setWindowIcon(QIcon( './icons/icon.png'))
  398. self.setFixedSize( 425, 300)
  399. # 使用正则表达式限制用户输入
  400. stu_id_regx = QRegExp( '^[0-9]{12}$')
  401. stu_id_validator = QRegExpValidator(stu_id_regx, self.stuIDLineEdit)
  402. self.stuIDLineEdit.setValidator(stu_id_validator)
  403. cn_name_regx = QRegExp( '^[\u4e00-\u9fa5]{1,10}$')
  404. cn_name_validator = QRegExpValidator(cn_name_regx, self.cnNameLineEdit)
  405. self.cnNameLineEdit.setValidator(cn_name_validator)
  406. en_name_regx = QRegExp( '^[ A-Za-z]{1,16}$')
  407. en_name_validator = QRegExpValidator(en_name_regx, self.enNameLineEdit)
  408. self.enNameLineEdit.setValidator(en_name_validator)
  409. if __name__ == '__main__':
  410. logging.config.fileConfig( './config/logging.cfg')
  411. app = QApplication(sys.argv)
  412. window = DataRecordUI()
  413. window.show()
  414. sys.exit(app.exec())

本项目资源下载地址:https://download.csdn.net/download/m0_38106923/10958540

Python+OpenCv实现AI人脸识别身份认证系统(1)——人脸识别原理:

https://blog.csdn.net/m0_38106923/article/details/86489773

Python+OpenCv实现AI人脸识别身份认证系统(3)——训练人脸识别模型:

https://blog.csdn.net/m0_38106923/article/details/88879876

        
展开阅读全文
    


	
  • 上一页
  • 1
  • 下一页

python实现实时人脸识别

11-30 阅读数 6099

一、项目概要输入你要识别人的图片到数据库文件,运行程序能实时识别当前摄像头画面里的人脸中有无该人,有则显示该人的名字,若该人脸不在数据库中,则显示unknow。效果:二、框架项目主要使用的是face_... 博文 来自: HOMERUNIT的博客

Python基于OpenCV的人脸检测并保存

09-18 阅读数 581

安装opencv如果安装了pip的话,Opencv的在windows的安装可以直接通过cmd命令pipinstallopencv-python(只需要主要模块),也可以输入命令pipinstallop... 博文 来自: Canger_的博客

人脸识别之数据库存取

02-14 阅读数 1587

一、程序概况1.将人脸特征信息保存进MySQL数据库。2.调用摄像头识别人脸,将待识别的人物进行识别,并实时地与数据库中的人脸特征信息进行比对,同时判断出被识别者的身份。二、程序分析1.主要利用ope... 博文 来自: qq_42109746的博客



python人脸识别、语音合成、智能签到系统

09-23 阅读数 3200

基于python+face_recognition+opencv+pyqt5+百度AI实现的人脸识别、语音播报、语音合成、模拟签到系统(1)人脸识别效果图源码看最下面这是新版本地址https://bl... 博文 来自: Nie_Hen的博客

python+opencv人脸识别

03-08 阅读数 767

一.准备工作 对于Linux操作系统  1.安装Python  2.安装依赖库,命令如下:    yuminstallcmakegccgcc-c++gtk2-develgimp-develgimp-d... 博文 来自: m0_37786726的博客

Python + OpenCV 实现简单的人脸识别

05-19 阅读数 9387

前言人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部的一系列相关技术,通常也叫做人像... 博文 来自: 行走的IT

人脸检测Python(用摄像头采集图像然后检测人脸位置)

05-06 阅读数 2034

再来搬运一个人脸检测的例子,是《Python机器学习经典实例》的第10章的例子,书的代码可以从https://github.com/PacktPublishing/Python-Machine-Lea... 博文 来自: linnaoyu7359的博客

python实现人脸检测及识别(1)---- 采集人脸数据

05-10 阅读数 2144

  本次项目是采用keras深度学习框架,训练人脸识别模型,采用opencv实时检测与识别周围的人脸,本文主要讲解如何采集训练集,本次代码在人脸识别的代码上添加了将识别的照片依次写入指定文件夹,并命名... 博文 来自: destiny的专栏

如何构建自定义人脸识别数据集

06-26 阅读数 1046

https://www.jiqizhixin.com/articles/2018-06-26-3本文将介绍注册过程的第一步:创建自定义人脸识别数据集。如何创建自定义人脸识别数据集本教程中,我们将介绍3... 博文 来自: 随记

微信小程序--人脸识别以及保存到数据库

05-21 阅读数 812

&lt;viewclass="weui-cellweui-cell_inputweui-cell_vcode"&gt;&lt;viewclass="... 博文 来自: qq_41846328的博客

python 学习笔记 opencv人脸识别2 人脸检测

05-25 阅读数 256

C:\Python27\Lib\site-packages\cv2\data 博文 来自: 朝歌

python实现人脸识别人脸对比

07-19 阅读数 1436

使用face++,先获取key和secret下方是人脸识别,还添加了画出人脸轮廓的正方形importrequests#网络访问控件fromjsonimportJSONDecoder#互联网数据交换标准... 博文 来自: qq_38181012的博客

树莓派/PC实现实时摄像头数据共享(Python—OpenCV)

08-24 阅读数 2322

使用Python和OpenCV实现树莓派/PC实时摄像头数据共享,主要分为服务器和客户端两部分。服务器Demo如下:#服务器端importsocketimportthreadingimportstru... 博文 来自: 不脱发的程序猿

Python+OpenCV实现实时视频3D换脸

08-09 阅读数 5224

目录开发环境运行机制案例效果案例下载 开发环境 Python2.X或Python3.X OpenCV NumPy DLIB pygame PyOpenGL 必须从此处下载面部对齐模型:https://... 博文 来自: 不脱发的程序猿

Python、openCV人脸识别AI系统(一): Anaconda安装

11-01 阅读数 412

1、下载链接,一路默认安装https://www.anaconda.com/download/#windows2、装好了打开AnaondaPrompt3、执行condacreate-n python3... 博文 来自: u011075954的专栏

Python+OpenCv实现AI人脸识别身份认证系统(1)——人脸识别原理

07-02 阅读数 1255

目录人脸识别流程第一步:人脸检测,找出所有的面孔第二步:脸部的不同姿势第三步:给脸部编码第四步:从编码中找出人的名字最近一直在研究AI人脸识别身份认证,发现目前网上的识别Demo都是小Demo,非常零... 博文 来自: 不脱发的程序猿

Python3.6基于openCV2人脸识别18行代码

01-21 阅读数 147

Python3.6基于openCV2人脸识别18行代码教程地址https://edu.csdn.net/course/detail/16200一、安装 1.打开命令行,输入pipinstallnump... 博文 来自: 智轩软件的专栏

python人脸识别系统早已开源,离线识别率高达99%以上!

10-16 阅读数 4169

 以往的人脸识别主要是包括人脸图像采集、人脸识别预处理、身份确认、身份查找等技术和系统。现在人脸识别已经慢慢延伸到了ADAS中的驾驶员检测、行人跟踪、甚至到了动态物体的跟踪。由此可以看出,人脸识别系统... 博文 来自: 娇兮心有之的博客

通过Python+TensorFlow实现人脸识别(二)

07-26 阅读数 2723

1.简介上一篇中我们已经搭建好了环境,下面就该进入正题了。要想通过TensorFlow实现人脸识别,并“认识我”,需要准备两个数据集:一个是自己的人脸,一个是其他人的人脸。在准备好这两个数据集过后,我... 博文 来自: qq_32925781的博客

Win7环境下VS2015+Python 2.7 编译人脸识别开源库 face_recognition

09-20 阅读数 29

最近在研究一个人脸识别开源框架face_recognition,编译需要依赖dlib、boost、cmake等相关环境,在编译的时候,踩了一大堆坑,网上资料大都不是很全面再加上Windows环境下去配... 博文 来自: weixin_34074740的博客

【基于百度AI人脸识别Python实现

01-29 阅读数 4216

调用百度AI的baidu-aip库进行人脸识别,baidu-aip库可以使用pipinstallbaidu-aip进行安装关于人脸检测请求参数可参考传送门运行代码如下:#coding=UTF-8#利用... 博文 来自: LanLan的博客

python之百度AI实现人脸识别

05-05 阅读数 1261

最近研究了下opencv,本来准备用c++写一个人脸搜索的demo,但是有些包下载不下来,所以转到python,最近python很火,刚好可以研究一下。首先配置完python一些列balabala就不... 博文 来自: Jason824040945的博客

调用百度AI实现人脸识别-Python

11-17 阅读数 8164

参考:1、http://ai.baidu.com/docs#/Face-Python-SDK/top2、http://blog.csdn.net/u012236875/article/details/... 博文 来自: wc781708249的博客

基于百度AI人脸识别-Python

07-07 阅读数 7832

使用百度AI的人脸识别库,做出的调用示例,其中filePath是图片的路径,可以自行传入一张图片,进行识别。下载baidu-aip这个库,可以直接使用pip下载:pipinstallbaidu-aip... 博文 来自: EaseMob.沈冲

【图像识别】 Python+Opencv调用摄像头实现人脸识别并保存视频

12-26 阅读数 1万+

本文介绍了利用Python+Opencv实现调用摄像头、进行人脸识别、并保存为avi格式视频的程序方法。至于python+opencv测试环境的搭建,回头再开一个帖子进行介绍。【前期配置】Python... 博文 来自: 汽车数据技术前瞻

Python+OpenCv实现AI人脸识别身份认证系统(3)——训练人脸识别模型

07-02 阅读数 483

目录案例引入本节项目最近有小伙伴们一直在催本项目的进度,好吧,今晚熬夜加班编写,在上一节中,实现了人脸数据的采集,在本节中将对采集的人脸数据进行训练,生成识别模型。案例引入首先简要讲解数据集训练生成模... 博文 来自: 不脱发的程序猿

玩转人工智能(7)计算机视觉OpenCV库持续深入学习总结

01-24 阅读数 540

聪明出于勤奋,天才在于积累。结合上文,本篇首先介绍数字图像处理的基础知识,由于篇幅有限,本人尽量结合日常工作中用到的或者熟悉的部分总结。后续介绍OpenCV库中图像处理函数的实现以及在应用平台中的使用... 博文 来自: MOSCAR的专栏

用Python实现一个简单的——人脸相似度对比

11-08 阅读数 4525

近几年来,兴起了一股人工智能热潮,让人们见到了AI的能力和强大,比如图像识别,语音识别,机器翻译,无人驾驶等等。总体来说,AI的门槛还是比较高,不仅要学会使用框架实现,更重要的是,需要有一定的数学基础... 博文 来自: 不脱发的程序猿

python 3 利用Face++官网接口和opencv实现实时人脸比对

05-09 阅读数 3156

我这里提示两种人脸识别方法:1、在线:基于开放平台提供的api来做识别,2、离线:通过开源库face_recognition需要自己安装我这里使用的在线api的方式做的。第二种在研究中,关键是gith... 博文 来自: 钻石


python+百度ai平台实现人脸识别

12-01 阅读数 1102

    python调用百度AI开放平台真的好简单啊,之前试过c++调用,但是配置那三个库已经把我心态搞崩了,尼玛还有两个是嵌套的。所以python大法好。    言归正传,我用的是百度的sdk,对应... 博文 来自: weixin_43551941的博客

face++与python实现人脸识别签到(考勤)功能

03-06 阅读数 1144

项目实现利用face++开发一个课堂签到的软件,实现面向摄像头即可完成记录学号、姓名和时间的签到工作。项目架构项目使用场景代码:流程代码,主文件#!usr/bin/#-*-coding:utf-8-*... 博文 来自: zhangbingxiazai的专栏

python实现调取百度AI人脸检测接口并解析72个脸部特征点

07-25 阅读数 2043

一:环境python3.5二:代码实现#coding:utf-8##BaiduFaceDetect##获取百度人脸检测接口信息返回##百度人脸检测文档:#https://ai.baidu.com/do... 博文 来自: VIEO

使用百度Ai进行人脸身份识别(公安验证)

02-28 阅读数 232

importcom.baidu.aip.util.Base64Util;importcom.enation.app.base.core.service.Exception.CreditAuthFace... 博文 来自: weixin_33819479的博客






python基于dlib的人脸定位与人脸比对实现

05-05 阅读数 2723

importdlibcurrent_path=os.getcwd()#获取当前路径#模型路径predictor_path=current_path+"\\model\\shape_predi... 博文 来自: xinfeng2005的专栏

Python 使用dlib 5行代码实现人脸比对

06-24 阅读数 1161

需要在linux下进行配置(本例是ubuntu),windows坑太多,环境没有配置成功。1.安装系统组件$sudoapt-getupdate$sudoapt-getinstallbuild-esse... 博文 来自: 代码铲屎官

腾讯openAI验证python篇之人脸分析

02-22 阅读数 1324

前言和百度一样,鹅家也开放了自己的openAI人工智能平台,在官网的例程说明中,腾讯给出了PHP的API鉴权及调用示例代码,可惜我一直在用python3.6+opencv3.4,在网络上寻找帮助,竟然... 博文 来自: 艾克思人工智能学习笔记

jquery/js实现一个网页同时调用多个倒计时(最新的)

11-25 阅读数 58万+

jquery/js实现一个网页同时调用多个倒计时(最新的)nn最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦!nnnn//jsn... 博文 来自: Websites

linux上安装Docker(非常简单的安装方法)

06-29 阅读数 31万+

最近比较有空,大四出来实习几个月了,作为实习狗的我,被叫去研究Docker了,汗汗!nnDocker的三大核心概念:镜像、容器、仓库n镜像:类似虚拟机的镜像、用俗话说就是安装文件。n容器:类似一个轻量... 博文 来自: 我走小路的博客

将Excel文件导入数据库(POI+Excel+MySQL+jsp页面导入)第一次优化

09-05 阅读数 8万+

本篇文章是根据我的上篇博客,给出的改进版,由于时间有限,仅做了一个简单的优化。相关文章:将excel导入数据库2018年4月1日,新增下载地址链接:点击打开源码下载地址十分抱歉,这个链接地址没有在这篇... 博文 来自: Lynn_Blog

            
                        

没有更多推荐了,返回首页

你可能感兴趣的:(图像处理,机器学习,人脸识别身份认证系统设计)