微信对接百度实现文字识别OCR
前置基础条件:
①注册测试账号
②开通自己的测试公众号
③完成与微信互发消息
④完成自定义菜单栏
详细步骤:https://blog.csdn.net/weixin_45565886/category_12059118.html
1 获取到百度文字识别API
①注册百度智能云账号:https://ai.baidu.com/
②开通文字识别应用【个人测试是免费的,申请即可】
③在控制台拿到相关参数
接口文档:https://cloud.baidu.com/doc/OCR/s/Nkibizxlf#%E9%80%9A%E7%94%A8%E6%96%87%E5%AD%97%E8%AF%86%E5%88%AB
2 定义上传图片按钮
官方文档:https://developers.weixin.qq.com/doc/offiaccount/Custom_Menus/Creating_Custom-Defined_Menu.html
定义图片按钮:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PicButton extends AbstractButton{
private String type = "pic_photo_or_album";
private String key;
private List<AbstractButton> sub_button = new ArrayList<>();
public PicButton(String name){
super(name);
}
}
3 定义service处理图片消息
@Service
public class WxService {
/**
* 测试图片文字识别
* @param requestMap
* @return
*/
public String testOCR(Map<String, String> requestMap){
// 初始化一个AipOcr
AipOcr client = new AipOcr(APP_ID, API_KEY, SECRET_KEY);
// 传入可选参数调用接口
HashMap<String, String> options = new HashMap<String, String>();
// options.put("language_type", "CHN_ENG");
// options.put("detect_direction", "true");
// options.put("detect_language", "true");
// options.put("probability", "true");
// // 参数为本地图片路径
// String image = "test.jpg";
// org.json.JSONObject res = client.basicGeneral(image, options);
// System.out.println(res.toString(2));
// 通用文字识别, 图片参数为远程url图片
String url = requestMap.get("PicUrl");
System.out.println("picUrl:" + url);
org.json.JSONObject res = client.basicGeneralUrl(url, options);
System.out.println("res===" + res.toString());
JSONArray jsonArray = res.getJSONArray("words_result");
Iterator<Object> iterator = jsonArray.iterator();
//拼接识别的文字结果
StringBuilder stb = new StringBuilder();
while(iterator.hasNext()){
org.json.JSONObject next = (org.json.JSONObject) iterator.next();
stb.append(next.get("words"));
}
return stb.toString();
}
/**
* 返回的消息
*
* @param requestMap
* @return
*/
public String getResponse(Map<String, String> requestMap) {
String msgType = requestMap.get("MsgType");
//要返回的消息
BaseMessage rtnMsg = null;
switch (msgType) {
//根据消息类型,处理不同消息
case "text":
rtnMsg = dealTextMessage(requestMap);
case "image":
//TODO
rtnMsg = dealPicMessage(requestMap);
break;
case "voice":
break;
case "video":
break;
case "shortvideo":
break;
case "location":
break;
case "link":
break;
default:
break;
}
return beanToXML(rtnMsg);
}
//处理图片消息
private BaseMessage dealPicMessage(Map<String, String> requestMap) {
//测试百度文字识别【OCR】
String rtnMsg = testOCR(requestMap);
// String returnMsg = "收到图片!!!";
TextMessage tm = new TextMessage(requestMap, rtnMsg);
return tm;
}
4 测试
自定义菜单页面:
发送图片结果: