“`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
3. 複製 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
參數指定。
“`
—