证件识别

支持识别多个国家的身份证件,包括但不限于中国、泰国、新加坡、印尼、阿联酋、日本、埃及、瑞典等国家,身份证、护照、驾驶证、港澳台通行证等80多种证件关键字段的识别输出,基于深度学习识别算法,支持生僻字、繁体字的识别

支持多组并发,同时处理多个识别进程,支持在光照不均、边缘遮挡、不同拍摄角度等各种复杂环境下的精准识别,适用于线上实名认证、银行业务办理、旅行等需要识别证件信息的场景

标准化服务接口,方便与系统对接,支持私有云部署,企业可将证件识别功能部署到内网服务器上

购买API 私有化部署

功能演示

图片显示处
证件识别

图像建议:大小在200KB左右,位深度24以上。

扫描图像建议:分辨率为300DPI,小于3M。

证件类型
  • 身份证件
  • 驾照
  • 通行证
  • 国外证件
  • 其他
  • 二代身份证(照片页)
  • 二代身份证(国徽页)
  • 护照
  • 二代身份证(正副页自动分类)
  • 香港居民身份证(照片页)
  • 澳门居民身份证(照片页)
  • 临时身份证
  • 外国人永久居留身份证
  • 澳门蓝卡
  • 台湾身份证(照片页)
  • 台湾身份证(条码页)
  • 港澳台居民居住证正面
  • 港澳台居民居住证反面
  • 签证
  • 驾驶证(正页)
  • 驾驶证(副页)
  • 驾驶证(正副页自动分类)
  • 行驶证(正页)
  • 行驶证(副页)
  • 行驶证(正副页自动分类)
  • 身份证/行驶证/驾照(自动分类)
  • 电子驾照(正页)
  • 电子驾照(副页)
  • 电子行驶证
  • 港澳居民来往内地通行证(照片页)
  • 港澳居民来往内地通行证(机读码页)
  • 台湾居民来往大陆通行证 2015 版(照片页)
  • 台湾居民往来大陆通行证 2015版(机读码页)
  • 往来港澳通行证 2014 版(照片页)
  • 往来台湾通行证 2017 版(照片页)
  • 新加坡身份证 2004 版
  • 新加坡驾驶证
  • 马来西亚驾驶证
  • 马来西亚身份证(照片页)
  • 菲律宾身份证(照片页)
  • 墨西哥选民证背面(ABC)
  • 墨西哥选民证(ABC)
  • 泰国国民身份证
  • 印度尼西亚居民身份证
  • 印度尼西亚驾驶证
  • 日本驾驶证
  • 瑞典驾驶证
  • 美国加利福利亚驾驶证
  • 新西兰驾驶证
  • 香港入境小票
  • 户口本首页
  • 户口本
  • 军官证 1998 版
  • 厦门社会保障卡(照片页)
  • 福建社会保障卡(照片页)
  • 居住证(广东/广西/东莞)(照片页)
  • 深圳居住证
  • 台湾健保卡
  • 边民证(A)(照片页)
  • 边民证(B)(个人信息页)
  • 律师证(A)(信息页)
  • 律师证(B)(照片页)
本地上传
  • 结果
  • JSON数据
  • 接入数:

免费试用

李经理 133 7162 1565 info@sinosecu.com.cn

离线识别SDK

支持快速集成到移动端与客户端应用中,支持Windows、Android、iOS等主流系统,无需网络,离线即可实现智能文字识别功能

私有化部署

部署至本地服务器中,在私有化环境中实现文字识别功能,保障数据私密性,支持CPU/GPU环境及国产化操作系统部署

AI硬件

提供多种业务场景的硬件设备,如扫描仪、发票管理系统、护照阅读器、车牌识别系统等,实现物联网信息的实时计算,返回文字识别与真伪核验结果

操作过于频繁,请输入验证码
x

按顺序填写与该色同色的验证码

API文档

一、图片为base64流
接口地址: https://netocr.com/api/recogliu.do
接口调用方法: post
接口接收参数:
序号 名称 类型 必填 说明
1 img String 上传的文件(图片的base64流)
2 key String 用户ocrKey
3 secret String 用户ocrSecrert
4 typeId Integer 识别类型(二代证2;行驶证6;驾照5;其他详见附录
5 format String 返回格式(xml或者json),如果format为空,则默认返回xml
二、图片为file格式
接口地址: https://netocr.com/api/recog.do
接口调用方法: post
接口接收参数:
序号 名称 类型 必填 说明
1 file MultipartFile 上传的文件(上传文件的字段名必须是“file”)
2 key String 用户ocrKey
3 secret String 用户ocrSecrert
4 typeId Integer 识别类型(二代证2;行驶证6;驾照5;其他详见附录
5 format String 返回格式(xml或者json),如果format为空,则默认返回xml
三、示例代码
  • Java
  • python
  • javascript
  • PHP
  • C#
  • C++
  • GO
  • Node.js
  • ios
  • Android

	package com.test;

	import okhttp3.*;
	import org.json.JSONObject;
	import java.io.*;
	/**
	 * 需要添加依赖
	 * 
	 * 
	 *     com.squareup.okhttp3
	 *     okhttp
	 *     4.12.0
	 * 
	 */
	class Sample {

		static final OkHttpClient HTTP_CLIENT = new OkHttpClient().newBuilder().build();

		public static void main(String []args) throws IOException{
			MediaType mediaType = MediaType.parse("text/plain");
			RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
			  .addFormDataPart("img","/9j")
			  .addFormDataPart("key","M***********g")
			  .addFormDataPart("secret","3***********6")
			  .addFormDataPart("typeId","2")
			  .addFormDataPart("format","json")
			  .build();
			Request request = new Request.Builder()
			  .url("https://netocr.com/api/recogliu.do")
			  .method("POST", body)
			  .build();
			Response response = HTTP_CLIENT.newCall(request).execute();
			System.out.println(response.body().string());
		}
	}
	

	import requests
	import json

	def main():

		url = "https://netocr.com/api/recogliu.do"

		payload = {
		'img': '/9j',
		'key': 'M***********g',
		'secret': '3***********6',
		'typeId': '2',
		'format': 'json'
		}
		files=[

		]
		headers = {}

		response = requests.request("POST", url, headers=headers, data=payload, files=files)

		print(response.text)

		if __name__ == '__main__':
			main()
	

	var form = new FormData();
	form.append("img", "/9j");
	form.append("key", "M***********g");
	form.append("secret", "3***********6");
	form.append("typeId", "2");
	form.append("format", "json");

	var settings = {
	 "url": "https://netocr.com/api/recogliu.do",
	 "method": "POST",
	 "timeout": 0,
	 "processData": false,
	 "mimeType": "multipart/form-data",
	 "contentType": false,
	 "data": form
	};

	$.ajax(settings).done(function (response) {
	 console.log(response);
	});
	

	<?php
	class Sample {

		public function run() {
			$curl = curl_init();
			curl_setopt_array($curl, array(

				CURLOPT_URL => 'https://netocr.com/api/recogliu.do',
				CURLOPT_RETURNTRANSFER => true,
				CURLOPT_ENCODING => '',
				CURLOPT_MAXREDIRS => 10,
				CURLOPT_TIMEOUT => 0,
				CURLOPT_FOLLOWLOCATION => true,
				CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
				CURLOPT_CUSTOMREQUEST => 'POST',
				CURLOPT_POSTFIELDS => array('img' => '/9j','key' => 'M***********g','secret' => '3***********6','typeId' => '2','format' => 'json'),

			));
			$response = curl_exec($curl);
			curl_close($curl);
			echo $response;
		}
	}
	$rtn = (new Sample())->run();
	print_r($rtn);
	

	var client = new HttpClient();
	var request = new HttpRequestMessage(HttpMethod.Post, "https://netocr.com/api/recogliu.do");
	var content = new MultipartFormDataContent();
	content.Add(new StringContent("/9j"), "img");
	content.Add(new StringContent("M***********g"), "key");
	content.Add(new StringContent("3***********6"), "secret");
	content.Add(new StringContent("2"), "typeId");
	content.Add(new StringContent("json"), "format");
	request.Content = content;
	var response = await client.SendAsync(request);
	response.EnsureSuccessStatusCode();
	Console.WriteLine(await response.Content.ReadAsStringAsync());
	

	#include 
	#include 
	#include 

	int main() {
		// 创建 HTTP 客户端
		web::http::client::http_client client(U("https://netocr.com/api/recogliu.do"));

		// 构建请求内容
		web::http::multipart_content content;
		content.add(web::http::name(U("img")), web::http::value(U("/9j")));
		content.add(web::http::name(U("key")), web::http::value(U("M***********g")));
		content.add(web::http::name(U("secret")), web::http::value(U("3***********6")));
		content.add(web::http::name(U("typeId")), web::http::value(U("2")));
		content.add(web::http::name(U("format")), web::http::value(U("json")));

		// 创建 HTTP 请求
		web::http::http_request request(web::http::methods::POST);
		request.headers().set_content_type(U("multipart/form-data; boundary=") + content.boundary());
		request.set_body(content);

		// 发送请求并获取响应
		web::http::http_response response = client.request(request).get();

		// 确保请求成功
		if (response.status_code() == web::http::status_codes::OK) {
			// 读取响应内容
			std::wstring responseString = response.extract_string().get();
			std::wcout << "Response: " << responseString << std::endl;
		} else {
			std::cerr << "Request failed with status code " << response.status_code() << std::endl;
		}
		return 0;
	}
	

	package main

	import (
	  "fmt"
	  "bytes"
	  "mime/multipart"
	  "net/http"
	  "io/ioutil"
	)

	func main() {
		url := "https://netocr.com/api/recogliu.do"
		method := "POST"

		payload := &bytes.Buffer{}
		writer := multipart.NewWriter(payload)
		_ = writer.WriteField("img", "/9j")
		_ = writer.WriteField("key", "M***********g")
		_ = writer.WriteField("secret", "3***********6")
		_ = writer.WriteField("typeId", "2")
		_ = writer.WriteField("format", "json")
		err := writer.Close()
		if err != nil {
		 fmt.Println(err)
		 return
		}

		client := &http.Client { }
		req, err := http.NewRequest(method, url, payload)

		if err != nil {
		 fmt.Println(err)
		 return
		}
		req.Header.Set("Content-Type", writer.FormDataContentType())
		res, err := client.Do(req)
		if err != nil {
		 fmt.Println(err)
		 return
		}
		defer res.Body.Close()

		body, err := ioutil.ReadAll(res.Body)
		if err != nil {
		 fmt.Println(err)
		 return
		}
		fmt.Println(string(body))
	}
	

	var request = require('request');
	var options = {
	   'method': 'POST',
	   'url': 'https://netocr.com/api/recogliu.do',
	   'headers': {
	   },
	   formData: {
		 'img': '/9j',
		 'key': 'M***********g',
		 'secret': '3***********6',
		 'typeId': '2',
		 'format': 'json'
	   }
	};
	request(options, function (error, response) {
	   if (error) throw new Error(error);
	   console.log(response.body);
	});
	

	import Alamofire

	class Sample {

		func performNetworkRequest() {
			let parameters: [String: Any] = [
				"img": "/9j",
				"key": "M***********g",
				"secret": "3***********6",
				"typeId": "2",
				"format": "json"
			]

			AF.request("https://netocr.com/api/recogliu.do", method: .post, parameters: parameters)
				.response { response in
					switch response.result {
					case .success(let responseData):
						if let data = responseData {
							let responseString = String(data: data, encoding: .utf8)
							print("Response: \(responseString ?? "")")
						}
					case .failure(let error):
						print("Error: \(error.localizedDescription)")
					}
				}
		}
	}
	let sample = Sample()
	sample.performNetworkRequest()
		
	

	import android.util.Log;
	import okhttp3.*;
	import java.io.IOException;

	public class Sample {

		private static final OkHttpClient HTTP_CLIENT = new OkHttpClient.Builder().build();

		public static void performNetworkRequest() {
			MediaType mediaType = MediaType.parse("text/plain");
			RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
					.addFormDataPart("img", "/9j")
					.addFormDataPart("key", "M***********g")
					.addFormDataPart("secret", "3***********6")
					.addFormDataPart("typeId", "2")
					.addFormDataPart("format", "json")
					.build();
			Request request = new Request.Builder()
					.url("https://netocr.com/api/recogliu.do")
					.method("POST", body)
					.build();

			HTTP_CLIENT.newCall(request).enqueue(new Callback() {
				@Override
				public void onFailure(Call call, IOException e) {
					Log.e("Sample", "Error: " + e.getMessage());
					// 处理请求失败情况
				}

				@Override
				public void onResponse(Call call, Response response) throws IOException {
					if (response.isSuccessful()) {
						String responseData = response.body().string();
						// 在这里处理响应结果
						Log.d("Sample", "Response: " + responseData);
					} else {
						Log.e("Sample", "Response code: " + response.code());
						// 处理响应失败情况
					}
				}
			});
		}
	}
		
	
查看详细API介绍

交易记录

图片显示处

请登录后体验

确定 取消