数学建模社区-数学中国

标题: Python-百度ocr识别 [打印本页]

作者: 檀俾九    时间: 2021-1-12 09:38
标题: Python-百度ocr识别

& z: f. ]9 u! e+ ^. K2 A  V[code=python]#!/usr/bin/python/ F  C9 r3 {9 x: j8 I8 v6 ~
# -*- coding: utf-8 -*-6 i( M8 t- d6 E* N0 V
" |2 o( }# B, Z8 |
import base64
3 _$ r8 A/ C1 |: n5 Ifrom os.path import exists7 y  f( a3 \/ g) B0 }; T
from tkinter import Tk
, e- w7 `5 k1 `+ g! M! @from tkinter.filedialog import askopenfilename7 Y0 v/ Z) T& ]+ g% t
from urllib.parse import urlencode% a8 f$ ]& \( W1 S% x6 |, t

, t+ z6 z: Z4 e6 x3 }- H' }import requests
# p" e$ _1 v+ i5 x0 S
! p- }6 v9 K( G! l: `7 t2 l5 i4 x' P/ V3 ]7 V; [
def Dialog_box():  E9 u$ ^  e% |. C* S
    root = Tk()
" y! C  t3 i2 b9 n% a7 I6 b    root.withdraw()
/ T6 w+ K( X! v, @' f! E& r, l; s" e( B. x; p" |
    filetypes = [(
3 r- X  d0 _& E3 f% m        '图片文件(*.jpg;*.jpeg;*.gif;*.png;*.bmp)', '*.jpg;*.jpeg;*.gif;*.png;*.bmp'),
$ M1 \9 |, f8 \4 r! q        ('所有文件(*.*)', '*.*')]
+ T5 X+ Y1 q! ~2 ]$ q5 ]0 ?$ N) n( f* B+ c, ?0 F8 q
    file_path = askopenfilename(filetypes=filetypes)- K; k, Q" q& p0 X$ i1 q
    return file_path
% C1 W+ [2 S) X7 B) U2 C! R1 I/ U/ P' {0 `
7 A% j- P5 ^+ D
def Read_file(file_path):
) R" y8 k; T* D5 N    with open(file_path, mode='rb') as file_object:
7 \3 W9 [1 q# }. m! S        contents = file_object.read(): s2 \4 [7 O" i0 J# v
        return contents.rstrip()
0 [: v" k" j8 s: ~- \0 y1 k3 N  R' N5 r' w# h1 t* \0 |1 ^
1 c# C: Y) l. ^% P$ c9 b
def Baidu_ocr(binary):
6 m9 c2 \9 S/ Y5 P+ i6 c# ]    url = "https://aip.baidubce.com/oauth/2.0/token?"+ Y6 s) g  X3 Z: U
    data = {
+ u2 R6 }1 O$ u( u( F% ~5 S' k! b+ x) Q        "grant_type": "client_credentials",% l: E9 O- ]: |1 L
        "client_id": "",  # 必填. H5 M5 F, U8 B2 N5 j) ~
        "client_secret": ""  # 必填
# j' u6 {2 ^% k4 A( ~    }
0 f1 x* v0 u# Y    url += urlencode(data)7 g, V( l* o8 W! h. F
    response = requests.get(url=url).json()
- x0 w& F! Y4 Z" {6 p* o6 O7 c0 L  s$ @    access_token = response['access_token']
# f- n! ~# L" v
1 J0 g) l4 q* [5 I/ U8 k! Q    url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token=" + access_token
7 `! D3 D2 ]7 _: @2 h* ]) a    post_data = {! W" N; f4 x, T. d8 ]. Y  v% G
        "image": base64.b64encode(binary),% M3 Z6 N, h) m. t$ U2 P& H
        "url": "",
. P: O3 R: b% \$ v; q        "language_type": "CHN_ENG",
8 Y  c* y  k* ?# f& J        "detect_direction": "false"," N2 L/ r0 h4 ]- n4 U. N
        "detect_language": "false",
- l3 q" J  M' {. U        "probability": "false"
- J+ j$ P: F0 |* B( C0 [6 T2 e    }
5 r% P* _- q$ V' Q2 B2 {; f1 F    response = requests.post(url=url, data=post_data).json()3 i) ]5 L  c  l5 s5 D
    num = response['words_result_num']; v5 [; A: C& q3 l5 x) ?; r
    result = '', I1 `- d% O4 Y/ @# R+ n
    for i in range(num):
0 o) b' n3 y7 Y4 M- s5 y        result += response['words_result'][ i]['words'] + "\r\n"7 j7 J+ p# d" C7 y; l. M: o$ W
    return result
5 a. w  w; W! c/ d% \4 P- W! G; F" A! ^
6 X( q) W. M7 P
if __name__ == "__main__":# B4 k4 q$ |2 m# l
    file_path = Dialog_box()
& S$ w8 D/ x9 S, A/ p% @3 u" M1 w* t    if exists(file_path):# T: R" |7 m. d7 f3 ?, F
        data = Read_file(file_path)
/ x  Z0 L0 y/ s1 N9 {% w5 o0 ^) x0 z        print(Baidu_ocr(data))# }8 s% B2 f. `$ G" i" m
: T& e* Q" p# Z
[/code]
+ v3 ^/ n; E& T' N2 l% Y" G+ Y( A7 Z2 e5 e% C

0 l2 w  m" a8 ~6 m% S
转发自派生社区
Python交流群:1047602540
3 C' B+ }" p1 v% {8 [. H% P4 K" c3 _0 t





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5