1. Préparation
Besoin d'installer opencv et la bibliothèque de requêtes
opencv:
Commencez par cmd pour ouvrir la ligne de commande et entrez pip install opencv-python -i https://mirrors.aliyun.com/pypi/simple/
comme indiqué ci-dessous:
Ensuite, attendez quelques secondes, vous verrez la situation suivante, la dernière line Opencv-python -4.4.0 installé avec succès (comme je suis la dernière version de Python3.8, je correspond automatiquement à cette version. Différentes versions de Python correspondent différemment à la version OpenCV):
Ensuite, ouvrez pycham pour expérimenter et entrez import cv2 comme cv:
il n'y a aucun problème pour l'exécuter. Installation réussie
Utilisez la liste pip pour afficher les packages installés
demande la bibliothèque:
Tout d'abord, vous devez trouver le dossier Scripts dans ce chemin et y sauter avec la commande cd
Entrez ensuite les demandes d'installation de pip
2. Utilisation d'une plate-forme NET
Inscription: https://open.iot.10086.cn/ai/helpCenter.html#/beginnerHelp?id=1&categoryType=1
Trouvez la recherche de visage et entrez
Trouvez la méthode d'appel
3. Flux de travail
1. Entrez le visage dans la galerie
2. Opencv prend des photos - enregistrez-les localement
import cv2
number = 0
count = 0
cap = cv2.VideoCapture(0) #0 或者-1适用于一个摄像头
face = cv2.CascadeClassifier("C:/users/administrator/appdata/local/programs/python/python37/lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml")
if not cap.isOpened(): #判断捕获一个摄像头
print("camera is not opened!!!")
while True: #循环捕获每一帧图片
ret,frame = cap.read() #ret:是否正常返回图像0 1 frame:返回的图像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 转灰
faces = face.detectMultiScale(gray)
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
if not ret:
print("grab frame err!")
break
cv2.imshow('frame',frame)
key = cv2.waitKey(25) #一帧阻塞25ms
count+=1
print(key)
# if cv2.waitKey(25) == 27:
# if key == ord('q'):
if count == 30:
file_name = '%s%d%s' % ('D:/face_test/',number,'.jpeg') # file_name = "D:/face_test/number.jpeg"
number+=1
print(file_name)
cv2.imwrite(file_name, frame)
print("save img ok")
count = 0
#break
cv2.destroyAllWindows()
cap.release() #释放
Il convient de noter que le chemin du trieur opencv est requis (j'utilise le modèle intégré, ou vous pouvez le former vous-même)
3. Obtenez le code de jeton de la plate-forme NET AI unique
import requests
import json
import base64
import random
class SimpleEncode():
keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz~!@#$%^&*()_+-={}[]:;<,>.?/|"
keyLength = len(keyStr)
encryptionA = 17
encryptionB = 8
decodeA = 0
preCountMax = 15
postCount = 5
randomChar = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnop"
randomCharLength = len(randomChar)
#base64字符
ALPHABET = "ABCDEFGHIJKLMN0123456789OPQRSTUVWXYZ+/abcdefghijklmnopqrstuvwxyz"
STANDARD = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" # 标准的字符串索引
#找到密钥
for i in range(1,keyLength):
if (encryptionA * i) % keyLength == 1:
decodeA = i
def base64Encode(self,sourceStr):
encode = ""
for ch in base64.b64encode(sourceStr.encode()).decode():
if ch == '=':
encode += '='
else:
for i in range(64):
if ch == self.STANDARD[i]:
encode += self.ALPHABET[i]
return encode
def encrpyt(self,sourceStr):
srcLength = len(sourceStr)
#先加入干扰字符的数量
addCharCount = random.randint(1,self.preCountMax) if srcLength < self.preCountMax else 0
#随机字符
sb = str(addCharCount)+"|"
for i in range(addCharCount):
sb += self.randomChar[random.randint(0,self.randomCharLength-1)]
sb += sourceStr
#尾部固定增加x个字符
for i in range(self.postCount):
sb += self.randomChar[random.randint(0,self.randomCharLength-1)]
#base64 加密
base64Str = self.base64Encode(sb)
destStr = ''
for i in range(len(base64Str)):
#找到字符所在位置
position = self.keyStr.find(base64Str[i])
#对字符进行转换
y = (self.encryptionA * position + self.encryptionB) % self.keyLength
#找到替换后的字符
destStr += self.keyStr[y]
return destStr
if __name__ == '__main__':
url = 'http://ai.heclouds.com:9090/v1/user/oneNetLogin'
headers = {
'Content-Type': 'application/json',
}
account = '1650337649ljy' # 用户名
password = '123qwe!@#' # 用户密码
simpleencode = SimpleEncode()
data = {'account': account, 'password': simpleencode.encrpyt(password)}
#print(data)
req = requests.post(url, data=json.dumps(data), headers=headers)
print(req.text)
num = req.text.index("Token")#寻找Token"首次出现的位置
num1 = req.text.index("}}")#寻找Token":"首次出现的位置
face_token = req.text[num+8:num1-1]#将此范围内的字符串规格
print(face_token)
4. Remplissez le code de jeton obtenu dans la routine de demande de reconnaissance faciale
import requests
import json
import base64
url = 'http://ai.heclouds.com:9090/v1/aiApi/picture/FACE_RECO_LIB'
headers ={
'Content-Type':'application/json',
'Login-Token':'xxxxxxxxxxxxxxxxx(用户鉴权接口返回结果loginToken)'
}
faceLibId = '123456789098765432,0.7'
file = open('用户上传图片位置','rb')
str = base64.b64encode(file.read()).decode()
file.close()
data = {'param':faceLibId,'picture':[str]}
req = requests.post(url,data=json.dumps(data),headers=headers)
print(req.text)
5. Intégration
import cv2
import requests
import json
import base64
url = 'http://ai.heclouds.com:9090/v1/aiApi/picture/FACE_RECO_LIB'
headers ={
'Content-Type':'application/json',
'Login-Token':'KEFxfUBxKUax*UmxOEF$K0m6KUK3O0JAKEFxfUBxKUax*UmxOEF$K0m6KUK3O0JAU16_Z16_XE1zQUF3KUBx*UJ0KUmA*Ea1KEBAKUayKEF4*E-y*U1yK0V1OUByKERzQUF1*ER3'
}
faceLibId = '796404311130247168,0.7'
number = 0
count = 0
cap = cv2.VideoCapture(0) #0 或者-1适用于一个摄像头
face = cv2.CascadeClassifier("C:/users/administrator/appdata/local/programs/python/python37/lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml")
if not cap.isOpened(): #判断捕获一个摄像头
print("camera is not opened!!!")
while True: #循环捕获每一帧图片
ret,frame = cap.read() #ret:是否正常返回图像0 1 frame:返回的图像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 转灰
faces = face.detectMultiScale(gray)
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
if not ret:
print("grab frame err!")
break
cv2.imshow('frame',frame)
key = cv2.waitKey(25) #一帧阻塞25ms
count+=1
print(key)
# if cv2.waitKey(25) == 27:
# if key == ord('q'):
if count == 30:
file_name = '%s%d%s' % ('D:/face_test/',number,'.jpeg') # file_name = "D:/face_test/number.jpeg"
number+=1
print(file_name)
cv2.imwrite(file_name, frame)
print("save img ok")
count = 0
file = open(file_name,'rb')
str = base64.b64encode(file.read()).decode()
file.close()
data = {'param':faceLibId,'picture':[str]}
req = requests.post(url,data=json.dumps(data),headers=headers)
print(req.text)
#break
cv2.destroyAllWindows()
cap.release() #释放
4. Communication série entre python et 32
Côté Python:
import serial
#连接串口
serial = serial.Serial('COM4',115200,timeout=2)
if serial.isOpen():
print ('串口已打开')
data = b'Beking\r\n' #发送的数据
data1=b'hello'
print ('You Send Data:',data1)
while True:
# data =str(serial.read(20),'utf-8') #串口读20位数据
#print(data[7])#10=\r
# num = data.index("\r")
#data = data[0:num]
#data = serial.read(20)
serial.write(data1) #串口写数据
data =str(serial.read(8),'utf-8') #串口读20位数据
print(data)
#break
else:
print ('串口未打开')
#关闭串口
serial.close()
if serial.isOpen():
print ('串口未关闭')
else:
print ('串口已关闭')
Terminal 32:
Retour après avoir reçu une interruption