一、前提
之前的项目需要进行车框识别,但是具体识别过程中,发现效果不是很理想,因为我们检测的对象往往是以车辆作为背景,也就是车辆的清晰度并不高,比如像下面这样的。对于这种清晰度不高的图像,hyperlpr的识别效果很不理想(比如下图就不能检测出车牌)
思考后,决定直接对图像清晰度下手。目前有两种方法:
(1)自己在网上找开源或者自己编写神经网络结构,借助数据集进行训练,然后得到模型。
(2)借助第三方接口,直接调用接口就可以将图片转化为高清。
由于我们这里对于图像清晰度的处理并不是非常重要的技术点,所以考虑直接调用接口:百度智能云平台 百度智能云-登录
二、具体实施
1、申请账号获得id
使用别人的接口,需要权限才可以,先进行权限的申请。申请账号后,进入“创建新应用”,先领取接口的免费额度。
这里我把《图像增强与特效》板块的接口都领取、选了,然后还是上图, 创建新应用。创建之后就可以获取到API key和Secret key ,这两个参数在获取token的时候用到。
2、获取token
# client_id 为官网获取的AK, client_secret 为官网获取的SK
import requests
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【官网获取的AK】&client_secret=【官网获取的SK】'
response = requests.get(host)
if response:
print(response.json())
access_token = response.json()['access_token']
print(access_token)
注意: &号前后不要加空格!!!直接把你的API key和Secret key弄上去取代【官网获取的AK】和【官网获取的SK】
运行程序,打印出来的信息花括号外的这一行就是你的token
3、图片高清化处理
官方参考文档图像增强与特效 - 图像清晰度增强 | 百度AI开放平台 (baidu.com)
import requests
import base64
request_url = "https://aip.baidubce.com/rest/2.0/image-process/v1/image_definition_enhance"
# 二进制方式打开图片文件
f = open(r'C:\Users\DELL\Desktop\1.png', 'rb')#参数为自己所要处理的图片的地址!!!
img = base64.b64encode(f.read())
params = {"image": img}
access_token = '自己的token值!!!,进行替换!!!'
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(request_url, data=params, headers=headers)
if response:
print(response.json()['image'])
"""post的返回值是base64,不是png图像,需要进行转换"""
img_new = base64.b64decode(response.json()["image"])
file = open(r'C:\Users\DELL\Desktop\2.png', 'wb')#参数为自己所希望的处理结果的位置!!!
file.write(img_new)
file.close()
4、观察处理效果
处理之后可见如下,emmmm,轮胎什么的确实变清晰了,但是我需要的车牌。。。还是一样糊。(左为处理前,右为处理后)
寻找下一个目标