1. 程式人生 > >百度人臉 檢測 識別 python3.5 APIV3版本

百度人臉 檢測 識別 python3.5 APIV3版本

第一次寫部落格,我自己就想試試百度的人臉識別,程式碼也沒有優化,簡單的實現了一下供大家參 考。
實現的功能,一個資料夾有6個人的正臉照片,假設是上傳的人臉庫。另一個資料夾有100張圖片,就是抓拍的這6個人的圖片,有的圖片只有一個人,有的圖片有多個人。實現的功能是在圖片中標註出人臉框,上面寫上ID1:0.89,代表百度認為這個臉最像誰並輸出歸一化的相似度分數。
我自己之前試了一下,如果照片裡只有一個人,那就直接把待測照片和人臉庫照片直接交給百度的match識別函式就行,百度直接給你對比分數,效果還很好。如果照片有多張人臉,我就用檢測(detect)介面先進行檢測,把人臉圖擷取儲存,再用截出來人臉圖進行識別。這僅僅是我的想法,不一定正確,僅供參考。
另外,對於只有一個人的圖片,如果你採取截圖再識別(match)的方法,我試著分數會降低,不如直接識別(match)。
百度輸出的分數是0-100,我給化到0-1了。
這裡寫圖片描述

# -*- coding: utf-8 -*-
"""
Created on Thu Aug  2 17:36:41 2018

@author: 我永遠喜歡青山七海
"""

from aip import AipFace
import base64
import cv2
# 定義常量
APP_ID = 'XXXXXXX'
API_KEY = 'XXXXXXX'
SECRET_KEY = 'XXXXXXX'
client = AipFace(APP_ID, API_KEY, SECRET_KEY)
IMAGE_TYPE='BASE64'
id=[]
id.append(0)#23333333
f1 = open('D:\\ID1.jpg','rb') id.append(base64.b64encode(f1.read())) f1.close f2 = open('D:\\ID2.jpg','rb') id.append(base64.b64encode(f2.read())) f2.close f3 = open('D:\\ID3.jpg','rb') id.append(base64.b64encode(f3.read())) f3.close f4 = open('D:\\ID4.jpg','rb') id.append(base64.b64encode(f4.read
())) f4.close f5 = open('D:\\ID5.jpg','rb') id.append(base64.b64encode(f5.read())) f5.close f6 = open('D:\\ID6.jpg','rb') id.append(base64.b64encode(f6.read())) f6.close def match(img): score=[] for i in range(1,7): params1 = [{"image":str(img,'utf-8'),"image_type":IMAGE_TYPE},{"image":str(id[i],'utf-8'),"image_type":IMAGE_TYPE}] result = client.match(params1); #print(result) if result['error_msg']=='pic not has face': print('no match ') return 0 #print('match result') #print (result) tmp=result['result']['score']/100.0 score.append(tmp) #print(result['result']['score']) #print('match result') print ([float("%.2f" % max(score)),score.index(max(score))+1]) return[float("%.2f" % max(score)),score.index(max(score))+1]#最高分數和ID def detect(img64,j): options = {'max_face_num': 5, }# 影象數量 result1=client.detect(img64, "BASE64", options) if result1['error_msg']=='pic not has face': print('no face') return [] faceNum=result1['result']['face_num'] if faceNum == 0: return [] img=cv2.imread('D:\\test\\{}.jpg'.format(j)) result=[] for i in range(faceNum):#儲存小圖 '''if result1['result']['face_list'][i]['face_probability'] >0.3: location=result1['result']['face_list'][i]['location'] left_top=(int(location['left']),int(location['top'])) right_bottom=(left_top[0]+int(location['width']),left_top[1]+int(location['height'])) result.append([left_top,right_bottom]) #print(left_top[1],right_bottom[1],left_top[0],right_bottom[0]) cropImg=img[max(0,left_top[1]):max(0,right_bottom[1]),max(0,left_top[0]):max(0,right_bottom[0])] cv2.imwrite('D:\\cropImg\\{}.{}.jpg'.format(j,i),cropImg)''' location=result1['result']['face_list'][i]['location'] left_top=(int(location['left']),int(location['top'])) right_bottom=(left_top[0]+int(location['width']),left_top[1]+int(location['height'])) result.append([left_top,right_bottom]) #print(left_top[1],right_bottom[1],left_top[0],right_bottom[0]) cropImg=img[max(0,left_top[1]):max(0,right_bottom[1]),max(0,left_top[0]):max(0,right_bottom[0])] cv2.imwrite('D:\\cropImg\\{}.{}.jpg'.format(j,i),cropImg) #print('detect result\n') #print(result) return result if __name__ == '__main__': for j in range(1,101): print('.........................') print(j) f = open('D:\\test\\{}.jpg'.format(j),'rb') image = base64.b64encode(f.read()) img64 = str(image,'utf-8') result_detect=detect(img64,j) print (len(result_detect)) im=cv2.imread('D:\\test\\{}.jpg'.format(j)) if result_detect==0 or result_detect==[]: cv2.imwrite('D:\\result\\{}.jpg'.format(j),im) continue if len(result_detect)==1: result_match=match(image) left_top,right_bottom=result_detect[0] cv2.rectangle(im,left_top,right_bottom,(0,0,255),2) text = 'ID{}'.format(result_match[1])+':{}'.format(result_match[0]) cv2.putText(im, text, (left_top[0],left_top[1]-6), cv2.FONT_HERSHEY_SIMPLEX,3, (0, 255, 0),5 ) cv2.imwrite('D:\\result\\{}.jpg'.format(j),im) if len(result_detect)>1: for i in range(len(result_detect)): f1 = open('D:\\cropImg\\{}.{}.jpg'.format(j,i),'rb') image = base64.b64encode(f1.read()) result_match=match(image) if result_match==0: cv2.imwrite('D:\\result\\{}.jpg'.format(j),im) continue left_top,right_bottom=result_detect[i] cv2.rectangle(im,left_top,right_bottom,(0,0,255),2) text = 'ID{}'.format(result_match[1])+':{}'.format(result_match[0]) cv2.putText(im, text, (left_top[0],left_top[1]-6), cv2.FONT_HERSHEY_SIMPLEX,3, (0, 255, 0),5 ) cv2.imwrite('D:\\result\\{}.jpg'.format(j),im)

手裡有國內其他兩家人臉識別的資料,效果來看,百度的人臉檢測率一般,但是絕對夠用,不是頂尖。相對來說通過率太恐怖了,真的是無論低光照還是大角度偏轉,通過率都非常好,但是誤識率我這沒法測。
程式碼寫的很爛見笑了

相關推薦

人臉 檢測 識別 python3.5 APIV3版本

第一次寫部落格,我自己就想試試百度的人臉識別,程式碼也沒有優化,簡單的實現了一下供大家參 考。 實現的功能,一個資料夾有6個人的正臉照片,假設是上傳的人臉庫。另一個資料夾有100張圖片,就是抓拍的這6個人的圖片,有的圖片只有一個人,有的圖片有多個人。實現的功能

爬取pexels女性圖片+人臉檢測過濾高顏值美女

     pexels網站提供了大量貼圖,從中搜索美女圖片,編寫爬蟲進行下載,下載後圖片中除了女人外,還包含男人,風景、靜物和動物,呼叫百度人臉檢測模組識別檢測,將其中顏值大於60分的美女儲存到另外一個資料夾。爬取圖片共計1251張,最後過濾出的美女共計287張。上程式碼:

呼叫人臉檢測API實現簡單的顏值檢測

    通過百度人工智慧平臺中的人臉檢測模組,實現簡單的人臉檢測,百度人工智慧平臺免費註冊,人臉檢測模組免費使用。相關API文件在:http://ai.baidu.com/docs#/Face-Detect-V3/top,依照API文件就可以寫出一個簡單的檢測工具。程式碼如下

Python3使用人臉識別接口識別高顏值妹子圖片

並不是 理解 exp content 平時 百度 CA blank 參考 一、在百度雲平臺創建應用 為什麽要到百度雲平臺創建應用,首先來說是為了獲取獲取access_token時需要的API Key和Secret Key 至於為什麽需要API Key和Secret Key

人臉識別AI實踐.doc

compare 技術 開發 描述 ear 註冊 aid con square 0, 前言 百度開放了很多AI能力,其中人臉識別就是其中之一。 本文對百度人臉識別AI進行實踐檢驗,看看其使用效果如何。 鑒於是最為基礎的實踐,基本都是在其接口範例代碼修改而來。 百度人臉

python 與 人臉識別api

ace tps get 格式 {} 之前 _id urllib 檢測 用python來做人臉識別代碼量少 思路清晰, 在使用之前我們需要在我們的配置的編譯器中通過pip install baidu-aip 即可 from aip import AipFace

人臉識別Java版

作為一個初級碼農,什麼百度雲,阿里雲,騰訊雲都搞一搞,前幾天看到百度的一個AI平臺,挺有意思的,於是乎做了一個人臉識別的小例子。看起來挺牛逼的,做完之後你只會佩服百度的強大!   先展示下專案吧!   通過呼叫攝像頭,實現獲取人臉影象,然後一秒鐘擷取一

基於SSM框架的人臉識別

教程地址: http://note.youdao.com/noteshare?id=dd26bdc2e8cd5a5c6ab903cff84652a6&sub=BDFD5CD71A144C35B227AD5C1ADC02AF 下載:人臉庫只錄入了我的,所以請替換成自己的,否則無法識別成

python人臉識別判斷人的喜、怒、哀、樂表情

前言 昨天百度給我手機發了條簡訊,內容如下 ![1236](https://upload-images.jianshu.io/upload_images/8491383-e38231e412bdd9a0.png? imageMogr2/auto-orient/strip%7CimageView2

人臉識別技術簡單入門

圖片說明: 人臉檢測 小於2M 人臉比對 單次傳入的兩張圖片,小於20M 人臉識別 小於10M 人臉認證 小於10M 人臉庫管理相關介面 小於10M 請求格式支援:PNG、JPG、JPEG、BMP,不支援GIF圖片 需要準備的

trackingjs+websocket+人臉識別API,實現人臉簽到

在公司做了個年會的簽到、抽獎系統。用java web做的,用公司的辦公app掃二維碼碼即可簽到,掃完碼就在大螢幕上顯示這個人的照片。之後領導讓我改得高大上一點,用人臉識別來簽到,就把掃二維碼的步驟改成人臉識別。瞭解了相關技術後,大致思路如下:先用websocket與後臺建立通

藉助雲中的人臉識別用Java開發一個人臉識別

效果可以微信掃一掃檢視 Java呼叫百度的介面。 示例工程也都是呼叫介面的程式碼 不知道為什麼好多人說看不懂 前提是自己會Java。知道JSON HTTP 程式碼報錯看看JDK有沒有替換成自己本地 demo可以看

人臉識別模塊使用分享

.org action user rotation sse nco ice -s icon 首先介紹下百度人臉識別模塊(baiduFaceRec): baiduFaceRec模塊封裝了百度AI人臉識別功能,使用此模塊可實現百度人臉檢測(包括age,beauty,expre

Unity中使用中文語音識別功能

來源 openapi ner key nbsp 語音識別 ann .text esp 下面是API類 Asr.cs using System; using System.Collections; using System.Collections.Generic;

iOS:長語音識別具體的封裝:識別、播放、進度刷新

stat app span nsdata cst 放音 datawit har resp 一、介紹 以前做過訊飛語音識別,比較簡單,識別率很不錯,但是它的識別時間是有限制的,最多60秒。可是有的時候我們需要更長的識別時間,例如朗誦古詩等功能。當然訊飛語音也是可以通過曲線救

ocr文字識別接口使用

提交 AC code fun post提交 mage tps image 通過 最近有個需求需要識別圖片中的文字,所以就用到了百度的ocr接口,結果在測試的過程中被圖片格式搞的有點暈,試了好久終於成功了,在此記錄一下。 附ocr接口文檔地址:https://cloud.ba

雲--文字識別

獲取 color html get 百度雲 tar ont api title 由於在開發過程中需要使用文字識別,由此學習了一下百度雲相關api。所獲直接就貼出來。 1.獲取文字識別的token 百度雲--文字識別

基於AdaBoost算法——世紀晟結合Haar-like特征訓練人臉檢測識別

st算法 技術分享 測速 循環 family sca 假設 弱分類器 ada AdaBoost?算法是一種快速人臉檢測算法,它將根據弱學習的反饋,適應性地調整假設的錯誤率,使在效率不降低的情況下,檢測正確率得到了很大的提高。 系統在技術上的三個貢獻: 1.用簡單的H

Python——AI影象識別API實現動物識別

摘要:百度AI的文件中心是Python2寫的示例程式碼,我的是Python3,之間遇到一些問題,主要是字串的編碼問題,後面有總結。以下是修改之後的Python3 示例程式碼 一、獲取access_token示例程式碼 import urllib.request # client_id

python呼叫圖片文字識別介面

# 登入百度api應用頁面獲取下面三相內容 APP_ID = 'xxxxx' API_KEY = 'xxxxxxx' SECRET_KEY = 'xxxxxxx' class BaiduImg(): def __init__(self, img_path): self.im