uniapp 请求自建ocr服务识别身份证

 

uniapp 请求自建ocr服务识别身份证_第1张图片 

 

uniapp 请求自建ocr服务识别身份证_第2张图片 

 

 {"person":"韦小宝","sex":"男","nation":"汉","birthday":"1654年12月20日","adress":"北京市东城区景山前街4号紫禁城敬事房","idcard":"11204416541220243X"} 

 解析ocr识别结果

	onGetImgClick: function() {
				uni.chooseImage({
					success: (chooseImageRes) => {
						const tempFilePaths = chooseImageRes.tempFilePaths;
						console.log('向服务器发送ocr识别图片')
						const uploadTask = uni.uploadFile({
							url: 'http://192.168.2.31:8000/api/ocr', //接口地址
							filePath: tempFilePaths[0],
							name: 'file',
							formData: {
								'user': 'test'
							},
							success: (uploadFileRes) => {
								console.log('收到服务器返回识别数据')
								// console.log(uploadFileRes.data);
								var strjson = JSON.parse(uploadFileRes.data).data;
								// console.log(strjson);
								var restmp = strjson.split('\n')
								// console.log(reslist.length);
								var reslist = []
								var idjson = {}

								//排除相似度低的数据
								restmp.forEach(function(value, index, arr) {
									var tmp = value.split('\t')
									if (parseFloat(tmp[1]).toFixed(1) > 0.5) {
										reslist.push(value)
									}
								})

								console.log("解析开始");
								//解析
								for (var i = 0; i < reslist.length; i++) {
									var tmp = reslist[i].split('\t')
									var str = tmp[0];
									// 姓名
									if (i === 0) {
										if (str.indexOf("姓名") >= 0 && str.length >
											2) { //姓名标签 同一行
											idjson.person = str.replace("姓名", "")
										} else { //姓名标签 不同行
											idjson.person = str
										}
									}
									//性别
									if ((str.indexOf("男") >= 0 && str.length === 1) || (str
											.indexOf("女") >= 0 && str.length === 1
										)) { //性别标签 不同行(单个存在)
										idjson.sex = str
									} else if (str.indexOf("性别") >= 0 && str.length >
										2) { //性别标签 同一行
										idjson.sex = str.replace("性别", "")
									}
									//民族 看前后数据判断
									if (str.indexOf("民族") >= 0 && str.length > 2) { //民族标签 同一行
										idjson.nation = str.replace("民族", "")
									} else if (str.indexOf("民族") >= 0 && str.length ===
										2) { //民族标签 不同行
										//看前后数据
										var tmp1 = reslist[i - 1].split('\t')
										var tmp2 = reslist[i + 1].split('\t')
										if (tmp1[0].indexOf("性别") >= 0 || tmp1[0].indexOf(
												"男") >= 0 || tmp1[0].indexOf("女") >= 0) {
											idjson.nation = tmp2[0] //取后边数据
										} else {
											idjson.nation = tmp1[0] //取前边数据
										}
									}
									//出生年月
									if (str.indexOf("出生") >= 0 && str.length ===
										2) { //出生标签 不同行
										var tmp1 = reslist[i - 1].split('\t')
										var tmp2 = reslist[i - 2].split('\t')
										idjson.birthday = tmp1[0] + tmp2[0]
									} else if (str.indexOf("出生") >= 0 && str.length >
										2) { //出生标签 同一行
										idjson.birthday = str.replace("出生", "")
									}
									//住址
									if (str.indexOf("住址") >= 0 && str.length ===
										2) { //住址标签 不同行
										var tmp1 = reslist[i - 1].split('\t')
										var tmp2 = reslist[i + 1].split('\t')
										idjson.adress = tmp1[0] + tmp2[0]
									} else if (str.indexOf("住址") >= 0 && str.length >
										2) { //住址标签 同一行
										var tmp2 = reslist[i + 1].split('\t')
										idjson.adress = str.replace("住址", "") + tmp2[0]
									}
									//身份证号 正则匹配
									if (str.indexOf("公民身份") >= 0 && str.length <
										10) { //身份号码标签 不同行
										var tmp1 = reslist[i - 1].split('\t')
										idjson.idcard = tmp1[0]
									} else if (str.indexOf("公民身份") >= 0 && str.length >
										10) { //身份号码标签 同一行
										//正则匹配 身份证号
										var strid = getIDcard(str)
										idjson.idcard = strid
									}

								}
								console.log("解析结束");
								console.log(idjson);
								 
								//----------------
							}
						});

						uploadTask.onProgressUpdate((res) => {
							// console.log('上传进度' + res.progress);
							// console.log('已经上传的数据长度' + res.totalBytesSent);
							// console.log('预期需要上传的数据总长度' + res.totalBytesExpectedToSend);

							// 测试条件,取消上传任务。
							// if (res.progress > 50) {
							// 	uploadTask.abort();
							// }
						});

					}
				});

				function getIDcard(string) {
					var reg = /[0-9,X,x]/;
					var num = 0;
					var IDarr = "";
					var arr = string.split("");
					for (var i = 0; i < arr.length; i++) {
						var item = arr[i];
						if (reg.test(item)) {
							num++;
							IDarr += "" + item;
							if (num == 18) {
								// console.log(IDarr.toString())
							}
						} else {
							num = 0;
							IDarr = "";
						}
					}
					return IDarr;
				}

你可能感兴趣的:(ARMV8,R5S,OCR,uni-app,javascript,前端)