Lua请求文字识别ocr api

1,安装Lua

下载 LuaForWindows_v5.1.5-52.exe

按默认安装

安装完毕,打开cmd可以运行Lua:

C:\projects>lua

Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio

>

2,安装dkjson

dkjson - JSON Module for Lua

下载dkjson.lua

获取Lua的加载模块的目录

C:\projects>lua -e "print(package.path)"

;.\?.lua;C:\Program Files (x86)\Lua\5.1\lua\?.lua;C:\Program Files (x86)\Lua\5.1\lua\?\init.lua;C:\Program Files (x86)\Lua\5.1\?.lua;C:\Program Files (x86)\Lua\5.1\?\init.lua;C:\Program Files (x86)\Lua\5.1\lua\?.luac

选择其中一个,所以把dkjson.lua复制到:

C:\Program Files (x86)\Lua\5.1\lua\

请求代码如下:

Lua 复制代码
-- ==============================================================================
-- API文档:https://market.shiliuai.com/doc/advanced-general-ocr
-- 支持免费在线体验
-- API文档清晰,提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等)
-- ==============================================================================


local http = require("socket.http")
local ltn12 = require("ltn12")
local base64 = require("base64")
local json = require("dkjson")


-- 设置UTF-8编码输出
if package.config:sub(1,1) == "\\" then
    os.execute("chcp 65001 > nul")
    io.stdout:setvbuf("no")
end


-- 请求接口
local URL = "http://ocr-api.shiliuai.com/api/general_ocr/v1"


-- 图片转base64
local function get_base64(file_path)
    local file = io.open(file_path, "rb")
    if not file then
        return nil, "Unable to open file"
    end
    local data = file:read("*all")
    file:close()
    local b64 = base64.encode(data)
    return b64
end


local function demo(appcode, file_path)
    -- 请求头
    local headers = {
        ["Authorization"] = "APPCODE " .. appcode,
        ["Content-Type"] = "application/json",
        ["Accept"] = "application/json",
        ["Connection"] = "close"  -- 明确关闭连接
    }


    -- 请求体
    local b64, err = get_base64(file_path)
    if not b64 then
        print("Error:", err)
        return
    end


    local data = {
        ["image_base64"] = b64
    }
    local json_data = json.encode(data, {indent=false})


    -- 打印完整的请求数据(调试用)
    -- print("[DEBUG] Request Headers:", json.encode(headers))
    -- print("[DEBUG] Request Body (first 100 chars):", json_data:sub(1, 100))


    -- 手动设置 Content-Length
    headers["Content-Length"] = #json_data


    -- 请求
    local response_body = {}
    local res, code, response_headers = http.request{
        url = URL,
        method = "POST",
        headers = headers,
        source = ltn12.source.string(json_data),
        sink = ltn12.sink.table(response_body),
        timeout = 30,
        chunked = false  -- 禁用分块传输
    }


    -- 检查响应是否有效
    if code ~= 200 then
        print("[ERROR] HTTP Code:", code)
        print("[ERROR] Response Body:", table.concat(response_body))
        return
    end


    -- 合并响应体
    local response_text = table.concat(response_body)
    print("[DEBUG] Response:", response_text)


    -- 解析JSON响应
    local content, pos, err = json.decode(response_text, 1, nil)
    if err then
        print("[ERROR] Fail to decode JSON:", err)
        return
    end


    -- 处理识别结果
    if content and content.code == 200 and content.data then
        print("=== 识别结果 ===")
        for i, item in ipairs(content.data.content) do
            print(string.format("%d. text: %s", i, item.text))
            print(string.format("   prob: %.2f%%", item.prob * 100))
        end
    else
        print("[ERROR] API返回异常:", content and content.message or "未知错误")
    end


end



-- 主程序
local appcode = "你的APPCODE"
local file_path = "图片路径"
demo(appcode, file_path)

其中,appcode需要到market.shiliuai.com申请。

运行方式:

C:\projects>lua use_api.lua

相关推荐
是未才10 分钟前
从输入 URL 到页面返回:DNS、路由、TLS 与 HTTP 完整链路
java·后端·计算机网络
fthux16 分钟前
装闭 RenoPit 源码解析(05):FastAPI与Celery如何执行AI装修分析
人工智能·ai·开源·github·open source·renopit
格数致用35 分钟前
数据库设计与表结构详解|信息化项目全流程管理系统源码逐行精讲(五)
人工智能·政务·数据库设计·外键约束
罗西的思考1 小时前
【OpenClaw具身硬件】MiniClaw 阅读笔记---(1)基础
人工智能·算法·机器学习
DevUI团队1 小时前
从“即兴创作”到“规格先行”,华为云码道(CodeArts)代码智能体持续深耕企业级规范驱动开发能力
前端·人工智能·后端
论文避坑指南1 小时前
论文写作全流程AI合规边界:从选题到投稿的“红绿灯“清单
大数据·人工智能·深度学习
Dawson Zhu1 小时前
工业世界模型——基于AI Agent+数学仿真架构
人工智能·架构·agi
冬奇Lab1 小时前
开源项目第183期:Ontology Playground — 微软出品的本体论可视化学习工具,零后端、浏览器直接运行
人工智能·microsoft·开源
Wang's Blog1 小时前
AI Agent白手起家52: 从零搭建钉钉智能助手——资源准备与核心架构实现
人工智能·架构·钉钉
冬奇Lab1 小时前
代码库知识库系列(13):评测——怎么知道知识库够不够好
人工智能