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

相关推荐
葫芦和十三8 小时前
图解 MongoDB 19|Oplog:复制的真正载体,不是文档是操作
后端·mongodb·agent
葫芦和十三8 小时前
图解 MongoDB 20|复制延迟与 catch up:Secondary 为什么跟不上
后端·mongodb·agent
小和尚同志8 小时前
AI 自动化测试探索(二):Chrome-devtools MCP
人工智能·e2e·aigc
冬奇Lab10 小时前
Workflow 系列(02):设计范式——四层架构、三种 Context 传递模式与确认门设计
人工智能·agent·工作流引擎
冬奇Lab10 小时前
每日一个开源项目(第145篇):Trellis - 把项目记忆、规范和任务上下文持久化进代码仓库
人工智能·开源·资讯
有道AI情报局10 小时前
Harness即产品
人工智能·agent
罗西的思考12 小时前
机器人 / 强化学习】HIL-SERL:人类在环驱动的具身智能进化框架
人工智能·算法·机器学习
IT_陈寒13 小时前
SpringBoot自动配置的坑,我的API突然就404了
前端·人工智能·后端
笃行35013 小时前
从零到上线:用 EdgeOne Makers + CodeBuddy 搭一个「对账核对员」AI Agent
人工智能