第五期【百度大脑新品体验】看透二维码背后的秘密
wangwei8638 发布于2019-09 浏览:1899 回复:3
0
收藏
最后编辑于2022-04

条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符。条形码可以标出物品的生产国、制造厂家、商品名称、生产日期、图书分类号、邮件起止地点、类别、日期等许多信息,因而在商品流通、图书管理、邮政管理、银行系统等许多领域都得到广泛的应用。

二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。

百度的二维码识别服务能识别条形码、二维码中包含的URL或其他信息内容,让你清楚地看到二维码背后承载的信息。

一.平台接入

此步骤比较简单,不多阐述。可参照之前文档:

https://ai.baidu.com/forum/topic/show/943162

二.分析接口文档

1.打开API文档页面,分析接口要求

https://ai.baidu.com/docs#/OCR-API/535c3463

   (1)接口描述

识别条形码、二维码中包含的URL或其他信息内容。

(2)请求说明

需要用到的信息有:

请求URL:https://aip.baidubce.com/rest/2.0/ocr/v1/qrcode

Header格式:Content-Type:application/x-www-form-urlencoded

Body中放置请求参数,参数详情如下:

(3)返回参数                               

返回示例

{ "log_id": 863402790, 
  "codes_result": [ { 
      "type": "QR_CODE", 
      "text": [ "中国", "北京" ] 
  } ], 
  "codes_result_num": 1 
 }

2.获取access_token

# encoding:utf-8

import base64

import urllib

import urllib2



request_url = " https://aip.baidubce.com/rest/2.0/ocr/v1/qrcode "

f = open('[本地文件]', 'rb')

img = base64.b64encode(f.read())

params = {"data": data }

params = urllib.urlencode(params)

access_token = '[调用鉴权接口获取的token]'

request_url = request_url + "?access_token=" + access_token

request = urllib2.Request(url=request_url, data=params)

request.add_header('Content-Type', 'application/x-www-form-urlencoded')

response = urllib2.urlopen(request)

content = response.read()

if content:

print content

三.识别结果

1. 二维码

识别结果:

type: QR_CODE

text: ['路途遥远我们在一起吧']

此二维码适合拿去表白哈~

2. 条形码

识别结果:

type: CODE_39

text: ['B2512554']

 3. 实物图片

识别结果:

type: EAN_13

text: ['6927033131089']

识别结果:

type: QR_CODE

text: ['9Jc1x07578bjueuaf2kwlva12aGO']

识别结果方面:采用不同形式的条形码、二维码进行测试,识别结果比较准确。

处理速度方面:每张图片处理时间在1s以内,速度很快。

四.源码共享

# -*- coding: utf-8 -*-

#!/usr/bin/env python

import urllib

import urllib.parse

import urllib.request

import base64

import json

#client_id 为官网获取的AK, client_secret 为官网获取的SK

client_id = '******************'

client_secret = '************************'



#获取token

def get_token():

    host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + client_id + '&client_secret=' + client_secret

    request = urllib.request.Request(host)

    request.add_header('Content-Type', 'application/json; charset=UTF-8')

    response = urllib.request.urlopen(request)

    token_content = response.read()

    if token_content:

        token_info = json.loads(token_content.decode("utf-8"))

        token_key = token_info['access_token']

    return token_key



     # 读取图片

def get_file_content(filePath):

    with open(filePath, 'rb') as fp:

        return fp.read()





#获取二维码信息

def get_license_plate(path):



    request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/qrcode"

   

    f = get_file_content(path)

    access_token=get_token()

    img = base64.b64encode(f)

    params = {"image": img}

    params = urllib.parse.urlencode(params).encode('utf-8')

    request_url = request_url + "?access_token=" + access_token

    request = urllib.request.Request(url=request_url, data=params)

    request.add_header('Content-Type', 'application/x-www-form-urlencoded')

    response = urllib.request.urlopen(request)

    content = response.read()

    if content:

        datas = json.loads(content.decode("utf-8"))

        strover = '识别结果:'

        codes_result = datas['codes_result']

        i=1

        for item in codes_result:

            print ('type:',item['type']) 

            print ('text:',item['text']) 

            i=i+1

        return content

    else:

        return ''



image_path='F:\paddle\ma\s2.jpg'

get_license_plate(image_path)

五.意见建议

1.整体识别效果还是不错的,对同一张图多个条码的识别精确度还有待提高。

2.貌似不支持小程序码的识别,建议增加对小程序码的识别。

 

收藏
点赞
0
个赞
共3条回复 最后由用户已被禁言回复于2022-04
#4wangwei8638回复于2019-10

内涵表白二维码

0
#3风搅火回复于2019-09

这个真的很棒,值得推广

0
#2wangwei8638回复于2019-09

二维码无所不在

0
TOP
切换版块