您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何基于Serverless云函數 SCF+Kaggle端到端驗證碼識別從訓練到部署,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
隨著驗證碼技術的更新換代,傳統的驗證碼識別算法已經越來越無用武之地了。近些年來人工智能迅速發展,尤其是在深度學習神經網絡這一塊生態尤為繁榮,各種算法和模型層出不窮。
今天就嘗試帶大家借助 Kaggle+SCF 快速訓練部署一個端到端的通用驗證碼識別模型,真正的驗證碼識別從入門到應用的一條龍服務,哈哈哈~
沒做過數據科學競賽的同學,可能不太了解 kaggle 哈。
Kaggle is the world’s largest data science community with powerful tools and resources to help you achieve your data science goals.
這是 kaggle 官網)的自我介紹,簡單來說 kaggle 是全球最大的數據科學交流社區,上面有許多關于數據科學的競賽和數據集,并且提供了一些數據科學在線分析的環境和工具,一直以來吸引了全球大批數據科學愛好者,社區極其繁榮。
這里我們主要是用 kaggle 的 Notebooks 服務里的 kernel 環境來快速在云端訓練自己的驗證碼識別模型。
你可能會問在本地訓練不可以嗎,為啥非得折騰著上云?哈哈,這還真不是折騰,普通人的電腦算力其實是有限的,而訓練模型是需要強大 GPU 算力的支持,不然要訓練到猴年馬月~
我們再來看一下 kaggle 上的 kernel 環境的配置:
CPU 4核心,16 GB 運行內存
GPU 2核心 13 GB 運行內存
每個 kernel 有 9 小時的運行時長,GPU 資源每周 30 小時使用時長。除了硬件資源之外,kernel 環境里已經配置好了一些機器學習的常用庫,包括 Pytorch, Tensorflow 2 等,它的機器學習環境是開箱即用的,零配置,零維護。
Kaggle Notebooks run in a remote computational environment. We provide the hardware—you need only worry about the code.
正如 kaggle notebooks 官方文檔所言,kaggle 免費為你提供硬件和機器學習環境,你唯一需要關心的是你的代碼。這么好的東西關鍵還是免費提供的啊,果斷選它來訓練模型就對了。
賬號注冊、新建 kernel 等相關問題,網上有很多相關文章,這里不再細說了。
這里我在 github.com/nickliqian/cnn_captcha項目的基礎上,把原項目升級更新到了 Tensorflow 2.0,然后做了個 kaggle 訓練 + SCF 部署的通用驗證碼識別方案。
現在你只需要將我修改好的倉庫 https://gitee.com/LoveWJG/tflite_train克隆到本地,
然后按照項目里的 readme 配置一下訓練參數,替換一下自己的驗證碼數據集即可。
然后把配置好的項目壓縮上傳到 kaggle 直接解壓按照說明文件進行訓練即可。
這里用了 20000 張驗證碼,訓練了 10000 輪左右,大概耗時 30 分鐘,還是相當給力的。訓練結束后你可以根據倉庫里的 readme 文件,把模型、日志文件打包下載到本地,然后再在本地將模型轉成 tflite 格式(方便在移動端使用,本地識別驗證碼),如果模型文件過大你也可以在本地運行 tflite.py
程序把 tflite 模型量化,大概可以把模型文件縮小到原來的 1/4,最終你應該得到一個 .tflite
格式的模型文件。
云函數的創建、配置和發布可參考我之前的系列文章,這里就不再細講了。
新建一個 python 空白云函數,然后把 scf.py
文件里的代碼填到 index.py
里保存。
# -*- coding:utf-8 -*- import io import json import os import time import numpy as np import tensorflow as tf from PIL import Image model_path = "model_quantized.tflite" #模型文件地址 chars = '23456789abcdefghjkmpqrstuvwxy' #驗證碼字符,順序要與config.json里的一致 # Load TFLite model and allocate tensors. interpreter = tf.lite.Interpreter(model_path=model_path) interpreter.allocate_tensors() # Get input and output tensors. input_details = interpreter.get_input_details() output_details = interpreter.get_output_details() #將驗證碼數據轉換成模型輸入格式 def img2input(img, width, height): tmpe_array = [serverless] for i in range(height): for j in range(width): pixel = img.getpixel((j, i)) tmpe_array.append((0.3*pixel[0]+0.6*pixel[1]+0.1*pixel[2])/255) tmpe_array = np.array(tmpe_array).astype('float32') input_array = np.expand_dims(tmpe_array, axis=0) return input_array #識別驗證碼 def predict(image): captcha_image = Image.open(io.BytesIO(image)) image_np_expanded = img2input(captcha_image, 100, 50) interpreter.set_tensor(input_details[0]['index'], image_np_expanded) interpreter.invoke() output_data = interpreter.get_tensor(output_details[0]['index']) codes = '' for i in output_data[0]: codes += chars[i] return codes # api網關響應集成 def apiReply(reply, txt=False, content_type='application/json', code=200): return { "isBase64Encoded": False, "statusCode": code, "headers": {'Content-Type': content_type}, "body": json.dumps(reply, ensure_ascii=False) if not txt else str(reply) } #云函數入口 def main_handler(event, context): return apiReply( { "ok": False if not 'image' in event.keys() else True, "message": "請求參數無效" if not 'image' in event.keys() else predict(event['queryString']['image']) } )
把模型文件上傳到云函數根目錄,然后配置一下自己的驗證碼識別模型參數
model_path = "model_quantized.tflite" #模型文件地址 chars = '23456789abcdefghjkmpqrstuvwxy' #驗證碼字符,順序要與config.json里的一致
之后給我們的云函數添加一個 API 網關觸發器,并啟用響應集成,然后發布上線即可
沒有問題的話,你只需 GET 一下,就可以返回驗證碼識別結果了。
api網關+?base64Image=base64編碼后的驗證碼數據
小編帶大家從頭訓練并部署了一個通用驗證碼識別模型。我們再一次看到基于 Serverless 的云函數在開發線上應用的過程中是多么方便和迅速!
上述內容就是如何基于Serverless云函數 SCF+Kaggle端到端驗證碼識別從訓練到部署,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。