“`html

使用 Google Cloud Vision OCR 自動辨識身分證

在這篇教學中,我們將學習如何使用 Google Cloud Vision API 來自動辨識身分證。這個過程包含了 API 的申請、程式碼實作以及錯誤排除的步驟。這篇文章將根據 2025 最新語法與最佳實踐進行更新與優化。

1. 申請 Google Cloud API

首先,您需要前往 Google API Console 來申請 Cloud Vision API。

2. 申請 Cloud Vision API


Google API 申請步驟截圖

3. 複製 API 金鑰

API 金鑰截圖

public let API_GOOGLE_OCR = "https://vision.googleapis.com/v1/images:annotate?key=yourKey" // Google OCR

使用 Alamofire 發送請求

接下來,我們將使用 Alamofire 來發送 HTTP POST 請求至 Google OCR API。

public func sendPostJsonRequest(parameters: [String: Any]?, url: String, success: @escaping (JSON) -> Void, failure: @escaping (Error) -> Void, statusCode: @escaping (NSInteger) -> Void, isLoading: Bool = true) {
    if isLoading {
        loadingView.showLoading(nil)
    }
    Alamofire.request(URL(string: url)!, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: [:]).responseJSON { (response) in
        switch response.result {
        case .success:
            success(JSON(response.result.value!))
        case .failure(let error):
            failure(error)
            statusCode(response.response?.statusCode ?? 400)
        }
        if isLoading {
            self.loadingView.hideLoading()
        }
    }
}

辨識中文與英文

/**
 * 提交 Google 認證
 */
public class func apiGoogleOcr(base64ImageString: String,
                           success: @escaping (JSON) -> Void,
                           failure: @escaping (Error) -> Void,
                           statusCode: @escaping (NSInteger) -> Void) {
    let parameters = ["requests": [["image": ["content": base64ImageString], "features": [["type": "TEXT_DETECTION"]], "imageContext": ["languageHints": ["zh", "en"]]]]] as [String: Any]
    APIManager.shared.sendPostJsonRequest(parameters: parameters, url: API_GOOGLE_OCR, success: success, failure: failure, statusCode: statusCode)
}

UIImage 轉換為 Base64 字串

/// Google OCR 辨識
/// - Parameter image: 身分證圖片
func postGoogleOcr(image: UIImage) {
    guard let testImageData = image.jpegData(compressionQuality: 0.5) else { return }
    let base64 = testImageData.base64EncodedString()
    IdCardManager.apiGoogleOcr(base64ImageString: base64, success: { [self](response) in
        // 處理成功的回應
    }, failure: { error in
        // 處理失敗的回應
    }, statusCode: { code in
        // 處理狀態碼
    })
}

使用原生 HTTP POST

以下是使用 URLSession 進行 HTTP POST 的範例:

let semaphore = DispatchSemaphore(value: 0)
guard let testImageData = UIImage(named: "test2")?.jpegData(compressionQuality: 0.5) else { return }
let base64ImageString = testImageData.base64EncodedString()

let parameters = ["requests": [["image": ["content": base64ImageString], "features": [["type": "TEXT_DETECTION"]], "imageContext": ["languageHints": ["zh", "en"]]]]] as [String: Any]
let postData = try? JSONSerialization.data(withJSONObject: parameters)
var request = URLRequest(url: URL(string: "https://vision.googleapis.com/v1/images:annotate?key=yourKey")!, timeoutInterval: Double.infinity)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST"
request.httpBody = postData

let task = URLSession.shared.dataTask(with: request) { data, response, error in
    guard let data = data else {
        print(String(describing: error))
        return
    }
    print(String(data: data, encoding: .utf8)!)
    semaphore.signal()
}

task.resume()
semaphore.wait()

檢測照片


檢測照片示例

執行結果


執行結果示例


別忘了替換請求中的 yourKey 為您自己的 API 金鑰。

Q&A(常見問題解答)

Q1: 如何獲取 Google Cloud Vision API 的金鑰?

A1: 您可以通過訪問 Google API Console 來創建一個新的專案並啟用 Cloud Vision API,然後在憑證部分獲取您的 API 金鑰。

Q2: 如果我在辨識過程中遇到錯誤,該怎麼辦?

A2: 您可以在程式碼中添加錯誤處理邏輯,透過 failure 回呼來獲取具體的錯誤信息並進行相應的調試。

Q3: Google Cloud Vision API 支持哪些語言?

A3: Google Cloud Vision API 支持多種語言,包括中文和英文,您可以在請求中透過 languageHints 參數指定。

“`

Categorized in: