start_ocr()方法调用connect()方法依次搜题并保存结果。
def start_ocr(self): for file_path in self.file_paths: result=connect(file_path) print(file_path) self.save_result_format(file_path,result)从OcrQuestion.py的connect方法获取的结果是json格式,save_result_format()方法,解析从接口取得的接口,格式整理,保存结果到html:
def save_result_format(self,file_path,result): result_file_name=os.path.basename(file_path).split('.')[0]+'_result.html' f=open(self.result_path+'http://www.likecs.com/'+result_file_name,'w',encoding='utf-8') result_json= json.loads(result) if result_json['errorCode'] == '0': data=result_json['data'] questions=data["questions"] text=data["text"] f.write("题目识别:<br/>"+text) i=0 for answers in questions: i=i+1 subject="科目:"+answers["subject"]+"<br>" answer="答案:" +answers["answer"]+"<br>" analysis="分析:"+answers["analysis"]+"<br>" knowledge="知识点:"+answers["knowledge"]+"<br>" print(subject+answer+analysis+knowledge) result_each="<h3>搜题结果"+str(i)+"<br></h3>" result_each=result_each+subject+answer+analysis+knowledge+"<br>=================这是一条分隔符============<br>" f.write(result_each) else: f.write("result error code:"+result_json['errorCode'])OcrQuestion.py
OcrQuestion.py 中封装请求ocr搜题API的方法,其中最主要的方法是connect():
def connect(pic_path): f = open(pic_path, 'rb') # 二进制方式打开图文件 q = base64.b64encode(f.read()).decode('utf-8') # 读取文件内容,转换为base64编码 f.close() data = {} data['q'] = q data['signType'] = 'v2' curtime = str(int(time.time())) data['curtime'] = curtime salt = str(uuid.uuid1()) signStr = APP_KEY + truncate(q) + salt + curtime + APP_SECRET sign = encrypt(signStr) data['appKey'] = APP_KEY data['salt'] = salt data['sign'] = sign response = do_request(data) result=response.content.decode('utf-8') print(result) return result API响应结果示例 { "data":{ "questions":[ { "score":0.9875, "answer":"D", "subject":"历史", "id":"a9db8f1252778836c99204e5cf9d7738", "analysis":"", "type":"", "content":"学者们认为,五四运动标志着中国民族意识极大觉醒,表现在<br />A.近代民族民主思想开始传播 B .揭开了反帝反封建斗争的序幕<br />C.开启了近代中国的思想启蒙 D .各阶层民众的广泛动员和参与", "knowledge":"" }, { "score":0.9875, "answer":"D <br>注意题干“中国民族意识极大觉醒”,结合所学可知,在五四运动过程中,学生、工人、商人都投入到之中,即各阶层民众的广泛动员和参与,符合题意,故D项正确. <br>在戊戌变法前后,中国民族民主思想就已经开始传播,故A项错误. <br>五四运动是一次反帝反封的爱国运动,但不是反帝反封斗争的开始,在这时期还没有明确提出反帝反封的革命纲领,故B项错误. <br>中国近代是在新文化运动期间传播民主思想,进行了思想的启蒙,故C项错误. <br>故选D.", "subject":"历史", "id":"2f8b9c814f064131cc7b2bead54f15da", "analysis":"本题考查五四运动.考查五四运动的意义.考查学生对基础知识的识记、运用能力.", "type":"选择题", "content":"学者们认为,五四运动标志着中国民族意识极大觉醒,表现在( ) <p>A.近代民族民主思想开始传播<br/>B.揭开了反帝反封建斗争的序幕<br/>C.开启了近代中国的思想启蒙<br/>D.各阶层民众的广泛动员和参与 </p>", "knowledge":"/人类政治文明发展史/近代中国反侵略、求民主的潮流/五四运动" }, { "score":0.9875, "answer":"D <br>【答案】 <p>D</p> <p></p>", "subject":"历史", "id":"48a28969d882f20b04ffec15c8f1b94c", "analysis":"<p>题目问的五四运动,在戊戌变法前后,中国民族民主思想就已经开始传播,所以A不正确。五四运动是一次反帝反封的爱国运动,但不是反帝反封斗争的开始,在这时期还没有明确提出反帝反封的革命纲领,所以B不正确。中国近代是在新文化运动期间传播民主思想,进行了思想的启蒙,所以C不正确。在五四运动 过程中,学生、工人、商人都投入到之中,所以D正确。</p> <p> </p>", "type":"选择题", "content":"<p>学者们认为,五四运动标志着中国民族意识极大觉醒,表现在</p> <p></p> <p>A.近代民族民主思想开始传播<br/>B.揭开了反帝反封建斗争的序幕<br/>C.开启了近代中国的思想启蒙<br/>D.各阶层民众的广泛动员和参与 </p>", "knowledge":"/人类政治文明发展史/近代中国反侵略、求民主的潮流" } ], "text":"学者们认为,五四运动标志着中国民族意识极大觉醒,表现在 A,近代民族民主思想开始传播B揭开了反帝反封建斗争的序幕 C,开启了近代中国的思想启蒙D。 各阶层民众的广泛动员和参与" }, "errorCode":"0" }