|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386 |
- package weapp
-
- const (
- apiBankcard = "/cv/ocr/bankcard"
- apiVehicleLicense = "/cv/ocr/driving"
- apiDrivingLicense = "/cv/ocr/drivinglicense"
- apiIDCard = "/cv/ocr/idcard"
- apiBusinessLicense = "/cv/ocr/bizlicense"
- apiPrintedText = "/cv/ocr/comm"
- )
-
- // RecognizeMode 图片识别模式
- type RecognizeMode = string
-
- // 所有图片识别模式
- const (
- RecognizeModePhoto RecognizeMode = "photo" // 拍照模式
- RecognizeModeScan RecognizeMode = "scan" // 扫描模式
- )
-
- // BankCardResponse 识别银行卡返回数据
- type BankCardResponse struct {
- CommonError
- Number string `json:"number"` // 银行卡号
- }
-
- // BankCardByURL 通过URL识别银行卡
- // 接口限制: 此接口需要提供对应小程序/公众号 appid,开通权限后方可调用。
- //
- // token 接口调用凭证
- // url 要检测的图片 url,传这个则不用传 img 参数。
- // mode 图片识别模式,photo(拍照模式)或 scan(扫描模式)
- func BankCardByURL(token, cardURL string, mode RecognizeMode) (*BankCardResponse, error) {
- api := baseURL + apiBankcard
- return bankCardByURL(api, token, cardURL, mode)
- }
-
- func bankCardByURL(api, token, cardURL string, mode RecognizeMode) (*BankCardResponse, error) {
- res := new(BankCardResponse)
- err := ocrByURL(api, token, cardURL, mode, res)
- if err != nil {
- return nil, err
- }
-
- return res, nil
- }
-
- // BankCard 通过文件识别银行卡
- // 接口限制: 此接口需要提供对应小程序/公众号 appid,开通权限后方可调用。
- //
- // token 接口调用凭证
- // img form-data 中媒体文件标识,有filename、filelength、content-type等信息,传这个则不用传递 img_url。
- // mode 图片识别模式,photo(拍照模式)或 scan(扫描模式)
- func BankCard(token, filename string, mode RecognizeMode) (*BankCardResponse, error) {
- api := baseURL + apiBankcard
- return bankCard(api, token, filename, mode)
- }
-
- func bankCard(api, token, filename string, mode RecognizeMode) (*BankCardResponse, error) {
- res := new(BankCardResponse)
- err := ocrByFile(api, token, filename, mode, res)
- if err != nil {
- return nil, err
- }
-
- return res, err
- }
-
- // CardType 卡片方向
- type CardType = string
-
- // 所有卡片方向
- const (
- CardTypeFront = "Front" // 正面
- CardTypeBack = "Back" // 背面
- )
-
- // CardResponse 识别卡片返回数据
- type CardResponse struct {
- CommonError
- Type CardType `json:"type"` // 正面或背面,Front / Back
- ValidDate string `json:"valid_date"` // 有效期
- }
-
- // DrivingLicenseResponse 识别行驶证返回数据
- type DrivingLicenseResponse struct {
- CommonError
- IDNum string `json:"id_num"` // 证号
- Name string `json:"name"` // 姓名
- Nationality string `json:"nationality"` // 国家
- Sex string `json:"sex"` // 性别
- Address string `json:"address"` // 地址
- BirthDate string `json:"birth_date"` // 出生日期
- IssueDate string `json:"issue_date"` // 初次领证日期
- CarClass string `json:"car_class"` // 准驾车型
- ValidFrom string `json:"valid_from"` // 有效期限起始日
- ValidTo string `json:"valid_to"` // 有效期限终止日
- OfficialSeal string `json:"official_seal"` // 印章文构
- }
-
- // DriverLicenseByURL 通过URL识别行驶证
- // 接口限制: 此接口需要提供对应小程序/公众号 appid,开通权限后方可调用。
- //
- // token 接口调用凭证
- // url 要检测的图片 url,传这个则不用传 img 参数。
- // mode 图片识别模式,photo(拍照模式)或 scan(扫描模式)
- func DriverLicenseByURL(token, licenseURL string) (*DrivingLicenseResponse, error) {
- api := baseURL + apiDrivingLicense
- return driverLicenseByURL(api, token, licenseURL)
- }
-
- func driverLicenseByURL(api, token, licenseURL string) (*DrivingLicenseResponse, error) {
- res := new(DrivingLicenseResponse)
- err := ocrByURL(api, token, licenseURL, "", res)
- if err != nil {
- return nil, err
- }
-
- return res, nil
- }
-
- // DriverLicense 通过文件识别行驶证
- // 接口限制: 此接口需要提供对应小程序/公众号 appid,开通权限后方可调用。
- //
- // token 接口调用凭证
- // img form-data 中媒体文件标识,有filename、filelength、content-type等信息,传这个则不用传递 img_url。
- // mode 图片识别模式,photo(拍照模式)或 scan(扫描模式)
- func DriverLicense(token, filename string) (*DrivingLicenseResponse, error) {
- api := baseURL + apiDrivingLicense
- return driverLicense(api, token, filename)
- }
-
- func driverLicense(api, token, filename string) (*DrivingLicenseResponse, error) {
- res := new(DrivingLicenseResponse)
- err := ocrByFile(api, token, filename, "", res)
- if err != nil {
- return nil, err
- }
-
- return res, err
- }
-
- // IDCardResponse 识别身份证返回数据
- type IDCardResponse = CardResponse
-
- // IDCardByURL 通过URL识别身份证
- // 接口限制: 此接口需要提供对应小程序/公众号 appid,开通权限后方可调用。
- //
- // token 接口调用凭证
- // url 要检测的图片 url,传这个则不用传 img 参数。
- // mode 图片识别模式,photo(拍照模式)或 scan(扫描模式)
- func IDCardByURL(token, cardURL string, mode RecognizeMode) (*IDCardResponse, error) {
- api := baseURL + apiIDCard
- return idCardByURL(api, token, cardURL, mode)
- }
-
- func idCardByURL(api, token, cardURL string, mode RecognizeMode) (*IDCardResponse, error) {
- res := new(IDCardResponse)
- err := ocrByURL(api, token, cardURL, mode, res)
- if err != nil {
- return nil, err
- }
-
- return res, nil
- }
-
- // IDCard 通过文件识别身份证
- // 接口限制: 此接口需要提供对应小程序/公众号 appid,开通权限后方可调用。
- //
- // token 接口调用凭证
- // img form-data 中媒体文件标识,有filename、filelength、content-type等信息,传这个则不用传递 img_url。
- // mode 图片识别模式,photo(拍照模式)或 scan(扫描模式)
- func IDCard(token, filename string, mode RecognizeMode) (*IDCardResponse, error) {
- api := baseURL + apiIDCard
- return idCard(api, token, filename, mode)
- }
-
- func idCard(api, token, filename string, mode RecognizeMode) (*IDCardResponse, error) {
- res := new(IDCardResponse)
- err := ocrByFile(api, token, filename, mode, res)
- if err != nil {
- return nil, err
- }
-
- return res, err
- }
-
- // VehicleLicenseResponse 识别卡片返回数据
- type VehicleLicenseResponse struct {
- CommonError
- VehicleType string `json:"vehicle_type"`
- Owner string `json:"owner"`
- Addr string `json:"addr"`
- UseCharacter string `json:"use_character"`
- Model string `json:"model"`
- Vin string `json:"vin"`
- EngineNum string `json:"engine_num"`
- RegisterDate string `json:"register_date"`
- IssueDate string `json:"issue_date"`
- PlateNumB string `json:"plate_num_b"`
- Record string `json:"record"`
- PassengersNum string `json:"passengers_num"`
- TotalQuality string `json:"total_quality"`
- TotalprepareQualityQuality string `json:"totalprepare_quality_quality"`
- }
-
- // VehicleLicenseByURL 行驶证 OCR 识别
- func VehicleLicenseByURL(token, cardURL string, mode RecognizeMode) (*VehicleLicenseResponse, error) {
- api := baseURL + apiVehicleLicense
- return vehicleLicenseByURL(api, token, cardURL, mode)
- }
-
- func vehicleLicenseByURL(api, token, cardURL string, mode RecognizeMode) (*VehicleLicenseResponse, error) {
- res := new(VehicleLicenseResponse)
- err := ocrByURL(api, token, cardURL, mode, res)
- if err != nil {
- return nil, err
- }
-
- return res, nil
- }
-
- // VehicleLicense 通过文件识别行驶证
- func VehicleLicense(token, filename string, mode RecognizeMode) (*VehicleLicenseResponse, error) {
- api := baseURL + apiVehicleLicense
- return vehicleLicense(api, token, filename, mode)
- }
-
- func vehicleLicense(api, token, filename string, mode RecognizeMode) (*VehicleLicenseResponse, error) {
- res := new(VehicleLicenseResponse)
- err := ocrByFile(api, token, filename, mode, res)
- if err != nil {
- return nil, err
- }
-
- return res, err
- }
-
- // LicensePoint 证件点
- type LicensePoint struct {
- X uint `json:"x"`
- Y uint `json:"y"`
- }
-
- // LicensePosition 证件位置
- type LicensePosition struct {
- LeftTop LicensePoint `json:"left_top"`
- RightTop LicensePoint `json:"right_top"`
- RightBottom LicensePoint `json:"right_bottom"`
- LeftBottom LicensePoint `json:"left_bottom"`
- }
-
- // BusinessLicenseResponse 营业执照 OCR 识别返回数据
- type BusinessLicenseResponse struct {
- CommonError
- RegNum string `json:"reg_num"` // 注册号
- Serial string `json:"serial"` // 编号
- LegalRepresentative string `json:"legal_representative"` // 法定代表人姓名
- EnterpriseName string `json:"enterprise_name"` // 企业名称
- TypeOfOrganization string `json:"type_of_organization"` // 组成形式
- Address string `json:"address"` // 经营场所/企业住所
- TypeOfEnterprise string `json:"type_of_enterprise"` // 公司类型
- BusinessScope string `json:"business_scope"` // 经营范围
- RegisteredCapital string `json:"registered_capital"` // 注册资本
- PaidInCapital string `json:"paid_in_capital"` // 实收资本
- ValidPeriod string `json:"valid_period"` // 营业期限
- RegisteredDate string `json:"registered_date"` // 注册日期/成立日期
- CertPosition struct {
- Position LicensePosition `json:"pos"`
- } `json:"cert_position"` // 营业执照位置
- ImgSize LicensePoint `json:"img_size"` // 图片大小
- }
-
- // BusinessLicenseByURL 通过链接进行营业执照 OCR 识别
- func BusinessLicenseByURL(token, cardURL string) (*BusinessLicenseResponse, error) {
- api := baseURL + apiBusinessLicense
- return businessLicenseByURL(api, token, cardURL)
- }
-
- func businessLicenseByURL(api, token, cardURL string) (*BusinessLicenseResponse, error) {
- res := new(BusinessLicenseResponse)
- err := ocrByURL(api, token, cardURL, "", res)
- if err != nil {
- return nil, err
- }
-
- return res, nil
- }
-
- // BusinessLicense 通过文件进行营业执照 OCR 识别
- func BusinessLicense(token, filename string) (*BusinessLicenseResponse, error) {
- api := baseURL + apiBusinessLicense
- return businessLicense(api, token, filename)
- }
-
- func businessLicense(api, token, filename string) (*BusinessLicenseResponse, error) {
- res := new(BusinessLicenseResponse)
- err := ocrByFile(api, token, filename, "", res)
- if err != nil {
- return nil, err
- }
-
- return res, err
- }
-
- // PrintedTextResponse 通用印刷体 OCR 识别返回数据
- type PrintedTextResponse struct {
- CommonError
- Items []struct {
- Text string `json:"text"`
- Position LicensePosition `json:"pos"`
- } `json:"items"` // 识别结果
- ImgSize LicensePoint `json:"img_size"` // 图片大小
- }
-
- // PrintedTextByURL 通过链接进行通用印刷体 OCR 识别
- func PrintedTextByURL(token, cardURL string) (*PrintedTextResponse, error) {
- api := baseURL + apiPrintedText
- return printedTextByURL(api, token, cardURL)
- }
-
- func printedTextByURL(api, token, cardURL string) (*PrintedTextResponse, error) {
- res := new(PrintedTextResponse)
- err := ocrByURL(api, token, cardURL, "", res)
- if err != nil {
- return nil, err
- }
-
- return res, nil
- }
-
- // PrintedText 通过文件进行通用印刷体 OCR 识别
- func PrintedText(token, filename string) (*PrintedTextResponse, error) {
- api := baseURL + apiPrintedText
- return printedText(api, token, filename)
- }
-
- func printedText(api, token, filename string) (*PrintedTextResponse, error) {
- res := new(PrintedTextResponse)
- err := ocrByFile(api, token, filename, "", res)
- if err != nil {
- return nil, err
- }
-
- return res, err
- }
-
- func ocrByFile(api, token, filename string, mode RecognizeMode, response interface{}) error {
- queries := requestQueries{
- "access_token": token,
- "type": mode,
- }
-
- url, err := encodeURL(api, queries)
- if err != nil {
- return err
- }
-
- if err := postFormByFile(url, "img", filename, response); err != nil {
- return err
- }
-
- return nil
- }
-
- func ocrByURL(api, token, cardURL string, mode RecognizeMode, response interface{}) error {
- queries := requestQueries{
- "access_token": token,
- "img_url": cardURL,
- }
-
- if mode != "" {
- queries["type"] = mode
- }
-
- url, err := encodeURL(api, queries)
- if err != nil {
- return err
- }
-
- if err := postJSON(url, nil, response); err != nil {
- return err
- }
-
- return nil
- }
|