1.準備
opencvをインストールしてライブラリをリクエストする必要があります
opencv:
以下に示すように、最初のcmdでコマンドラインを開き、pip install opencv-python -i https://mirrors.aliyun.com/pypi/simple/と入力し
ます。
次に、数秒待つと、次の状況が表示されます。 line opencv-python -4.4.0が正常にインストールされました(私はPython3.8の最新バージョンであるため、このバージョンと自動的に一致します。Pythonのバージョンが異なればOpenCVのバージョンとの一致も異なります):
次に、pychamを開いて実験し、importcv2を次のように入力します。 cv:
実行に問題はありません。インストールの成功
インストールされたパッケージを表示するには、pipリストを使用します
リクエストライブラリ:
まず、そのパスでScriptsフォルダーを見つけて、cdコマンドでそのフォルダーにジャンプする必要があります。
次に、pipインストールリクエストを入力します
2.1つのNETプラットフォームの使用
登録:https://open.iot.10086.cn/ai/helpCenter.html#/beginnerHelp?id = 1&categoryType = 1
顔検索を見つけて入力します
呼び出しメソッドを見つける
3.ワークフロー
1.ギャラリーに顔を入力します
2.Opencvが写真を撮ります-ローカルに保存します
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() #释放
opencvソーターのパスが必要であることに注意してください(私は組み込みモデルを使用しますが、自分でトレーニングすることもできます)
3.1つのNETAIプラットフォームトークンコードを取得します
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.取得したトークンコードを顔認識リクエストルーチンに入力します
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.統合
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.Pythonと32の間のシリアル通信
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 ('串口已关闭')
32端子:
割り込み受信後に戻る