利用B/S和C/S实现百度人脸识别API
-
C/S服务器的设计:
def server(interface,port): # 创建套接字并进行监听 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind((interface, port)) sock.listen(1) print('Listening at', sock.getsockname()) while True: print('Waiting to accept a new connection') # 接收客户端连接 sc, sockname = sock.accept() print('We have accepted a connection from', sockname) print(' Socket name:', sc.getsockname()) print(' Socket peer:', sc.getpeername()) #接收图片 ph=getphoto(sc) #识别图片中的人的属性 back=baiduface(ph) #将人的属性发送给客户端 putfaceinfo(sc,back)def server(interface,port): # 创建套接字并进行监听 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind((interface, port)) sock.listen(1) print('Listening at', sock.getsockname()) while True: print('Waiting to accept a new connection') # 接收客户端连接 sc, sockname = sock.accept() print('We have accepted a connection from', sockname) print(' Socket name:', sc.getsockname()) print(' Socket peer:', sc.getpeername()) ph=getphoto(sc) back=baiduface(ph) putfaceinfo(sc,back)
-
客户端设计:
def client(host, port,photospath): # 创建套接字并进行连接 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((host, port)) print('Client has been assigned socket name', sock.getsockname()) #发送图片给服务器 putphotos(sock,photospath) #接收服务器发送的人的属性 getfaceinfo(sock)
-
注意:要实现百度ai人脸识别就要理清楚传输的过程,先传输文件长度,在传输文件内容。
-
B/S主要设计包括三个方面:前台界面,数据库,服务器。该框架是用的flask,前台用的jinjia2
主页:
@app.route('/', methods=['GET', 'POST'])
#主页,主要上传图片
def index():
#判断是否为post请求
if request.method == 'POST':
#通过前台获取imgfile文件
pichead = request.files.get('imgfile')
#读取文件
a=pichead.read()
#将文件数据存入数据库中
db = facebank.open_database()
#获取图片的id
binahao=facebank.addphotos(db, a)
#通过图片id获取图片数据
bytes=facebank.getphotos(db, binahao)
#调用百度人脸识别
b=baiduface(bytes)
#将人的属性存入到数据库中
facebank.addface(db,b[0],b[1],b[2],b[3],b[4])
#通过图片id得到得到人的属性数据
c=facebank.getface(db,binahao)
db.commit()
#提交后跳转到结果解码
return redirect(url_for('result',sex=c[0],age=c[1],people=c[2],fa=c[3],yan=c[4]))
return get('index.html').render()
结果界面:
#获取人的属性结果界面
@app.route('/result',methods=['GET', 'POST'])
def result():
return get('result.html').render(sex=request.args.get('sex'),age=request.args.get('age'), people=request.args.get('people'),
fa=request.args.get('fa'),yan=request.args.get('yan'))
在实现B/S同样要注意传输的过程:
详细请参考:利用BS和CS实现百度人脸识别API代码和说明文档
注:该用于自己学习笔记。