别再体验百度AI了,自己搞起来吧,人工智能很简单!

刚看了百度AI的人脸识别,火了很久的python+人工智能,百度号称专做AI,很多宣传课设的主题,百度AI-让你轻松人脸识别,简直像个笑话。我之所以这么说,是因为研究了两个小时的百度AI,除了搞明白他们专属的access_token、FACE_TOKEN之外,基本上什么都弄明白。所谓的百度AI,只是留给大家一个接口,然后执行一套固定的算法,结果就出来了,而真正做了什么,人工智能是什么,我们无从可知。相反,为了跑通这个程序,我们必须要搞明白他们固定的格式等等。

比如一个简单的例子,人脸对比(实际上就是两张图片相似度对比,而不管做什么,百度AI都是一个套路,只是调用的url和传递的参数不同而已)。

import json
import urllib2,base64

request_url='https://aip.baidubce.com/rest/2.0/face/v3/match'
access_token='24.be46cb0dfcf032f2bb5b6d0d7c5fe95d.2592000.1530841589.282335-1135***'

f=open('image/me1.jpeg','rb')
img1=base64.b64encode(f.read())
f=open('image/ge1.jpeg','rb')
img2=base64.b64encode(f.read())

params=json.dumps([{'image':img1,'image_type':'BASE64','face_type':'LIVE','quality_control':'LOW'},
                   {'image':img2,'image_type':'BASE64','face_type':'LIVE','quality_control':'LOW'}])

request_url = request_url + "?access_token=" + access_token
request = urllib2.Request(url=request_url, data=params)
request.add_header('Content-Type', 'application/json')
response = urllib2.urlopen(request)
content = response.read()
if content:
    print content

结果:

{"error_code":0,"error_msg":"SUCCESS","log_id":3458405637,"timestamp":1528269847,"cached":0,"result":{"score":9.794300079,"face_list":[{"face_token":"23a6c949e2dd346b255b04bfa37a3adf"},{"face_token":"2b63ae8fbf51b5a9c9159ee1963df73a"}]}}

事实上,无论你做什么,红色部分都是一样的,变化的就是url和params,做不同的事,传递不同的url和参数而已,而已,而已

注意1:

而我们为了跑通这个程序,必须要知道的是,access_token:百度AIP开放平台使用OAuth2.0授权调用开放API,调用API时必须在URL中带上accesss_token参数,为了获得这个参数,我们需要知道

  • grant_type: 必须参数,固定为client_credentials
  • client_id: 必须参数,应用的API Key
  • client_secret: 必须参数,应用的Secret Key

看吧,跟大街上扫码送东西是一个套路,想要东西,必须先注册,然后关注,验证。。。

你理解了吧,就是需要先注册成百度云的会员,然后关注一些东西,由关注的应用得到上面三个参数,在利用这三个参数得到accesss_token

import urllib,urllib2,sys
import ssl

host='https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=GzUAKFpteL0RdmvscP0ne***&client_secret=FWUGgeEr7ROV5ZCQEhXq9i6vWMUSZ***'
request=urllib2.Request(host)
request.add_header('Content-Type','application/json;charset=UTF-8')
response=urllib2.urlopen(request)
content=response.read()
print(content)
得到的accesss_token有效期为一个月。
注意2:
即便已经弄清了这些,我们还需要了解FACE_TOKEN,BASE64
图片类型
BASE64:图片的base64值,base64编码后的图片数据,编码后的图片大小不超过2M;
URL:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长);
FACE_TOKEN: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个。

为了获得FACE_TOKEN,你需要先把你的照片传上去,得到照片的id

import base64
import urllib,urllib2

access_token='24.be46cb0dfcf032f2bb5b6d0d7c5fe95d.2592000.1530841589.282335-11356***'
f = open('image/timg.jpg', 'rb')
img = base64.b64encode(f.read())

params = {"face_fields":"faceshape,facetype",
          "image":img,'image_type':'BASE64'}
params = urllib.urlencode(params)

request_url='https://aip.baidubce.com/rest/2.0/face/v3/detect'

request_url = request_url + "?access_token=" + access_token
request = urllib2.Request(url=request_url, data=params)
request.add_header('Content-Type', 'application/json')
response = urllib2.urlopen(request)
content = response.read()
if content:
    print content

结果:

{"error_code":0,"error_msg":"SUCCESS","log_id":3263712876,"timestamp":1528267900,"cached":0,"result":{"face_num":1,"face_list":[{"face_token":"a104e76591417d746c754dfd37113331","location":{"left":225.6935577,"top":191.730545,"width":270,"height":250,"rotation":-3},"face_probability":1,"angle":{"yaw":11.16189766,"pitch":-1.837561846,"roll":-1.425307155}}]}}

看吧,第二个坑也不小吧,而且你的照片一经传上去了哦!百度云AI就这样多了一张照片哦!

注意3:

再就是url,这个坑完全是版本问题,他们给的url对应的版本是v3,请大家一定要看好版本,在对应的版本文档里面查看代码,2和3是完全不同的。

  #v2

# params = {"images":img1 + ',' + img2}
# params = urllib.urlencode(params)

#v3
params=json.dumps([{'image':img1,'image_type':'BASE64','face_type':'LIVE','quality_control':'LOW'},
                   {'image':img2,'image_type':'BASE64','face_type':'LIVE','quality_control':'LOW'}])

当你把这些大坑都趟完了,你输入数据,存储了他们的数据库,他们给你个结果,仅此而已,对于AI,你仍然一窍不通,所以,还是踏踏实实的学习算法吧。

其实,分类也没有那么复杂,如果你不做算法研究,而仅仅是使用的话非常简单,个人觉得比调用百度AI还要容易,而且直观。

分类有声音、图片、视频、文本等,现在的文本分类是基于自然语言的,而图片分类,就是所谓的图像识别,准确率已经很高了,我们只要调用算法创建模型,在测试就可以了。

比如下面的小demo

#训练数据
training_feature = [[6,180,12],[5.92,190,11],[5.58,170,12],[5.92,165,10],
                    [5,100,6],[5.5,150,8],[5.42,130,7],[5.75,150,9]]
training_classify = [1,1,1,1,0,0,0,0]
#训练模型
model=GaussianNB()
model.fit(training_feature,training_classify)
#测试数据
testing_feature=[[6,130,8],[5.9,177,10]]
#测试模型,得出结果
predict_classify=model.predict(testing_feature)
print predict_classify

for sex in predict_classify:
    if sex==0:
        print "女"
    else:
        print "男"

不论是什么算法,都是训练模型fit(),测试predict(),看吧,是不是很简单!


最后,有人会问,既然那么简单,我们都自己训练模型自己测试就完了呗,调百度AI干什么?

鸟啊,训练模型是需要大量数据的,在这个信息贵如油的时代,谁有数据谁说了算。百度就凭个接口凭什么那么牛,因为他们有数据啊!他们的数据哪里来?你们传的啊!



展开阅读全文

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