Pular para o conteúdo principal

! Reconhecimento de texto em uma região da tela (screen.ocr_text)

Declaração

resultado_do_reconhecimento, detalhes_do_resultado = screen.ocr_text(esquerda, topo, direita, baixo [, opções_do_mecanismo, opções_de_binarização ])

Parâmetros

  • esquerda, topo, direita, baixo
    Inteiros que representam a região da tela; passe 0, 0, 0, 0 para indicar a tela inteira.

  • opções do mecanismo
    Tabela opcional usada para selecionar o idioma e o mecanismo de reconhecimento.

    Estrutura dos parâmetros
    {
    -- se o campo engine for "apple", usa o Vision.framework integrado da Apple no iOS 13 ou posterior
    -- use image.vision_supported_recognition_languages() para obter a lista de modelos OCR compatíveis com o Vision.framework
    -- se o campo engine for "paddle", usa o mecanismo Paddle-Lite; lang especifica o modelo
    -- por exemplo, lang = "ppocr_ch" usa o modelo /var/mobile/Media/1ferver/models/ppocr_ch
    -- o mecanismo Paddle-Lite aceita modelos Slim no formato *.nb
    engine = "apple" | "paddle" | "tesseract",
    lang = "zh-Hans",
    }
    Modelos OCR compatíveis com o Vision.framework integrado em cada versão do iOS
    { -- iOS 13
    [1] = "en-US",
    }

    { -- iOS 14~15
    [1] = "en-US",
    [2] = "fr-FR",
    [3] = "it-IT",
    [4] = "de-DE",
    [5] = "es-ES",
    [6] = "pt-BR",
    [7] = "zh-Hans",
    [8] = "zh-Hant",
    }

    { -- iOS 16
    [ 1] = "en-US",
    [ 2] = "fr-FR",
    [ 3] = "it-IT",
    [ 4] = "de-DE",
    [ 5] = "es-ES",
    [ 6] = "pt-BR",
    [ 7] = "zh-Hans",
    [ 8] = "zh-Hant",
    [ 9] = "yue-Hans",
    [10] = "yue-Hant",
    [11] = "ko-KR",
    [12] = "ja-JP",
    [13] = "ru-RU",
    [14] = "uk-UA",
    }
  • opções de binarização
    Número real: limiar de binarização; consulte Binarização automática de imagem.
    Tabela: desvio de cor de binarização personalizado; consulte Binarização manual de imagem.
    Texto: desvio de cor de binarização personalizado; consulte Binarização manual de imagem.

Valores retornados

  • resultado do reconhecimento
    Texto; texto retornado pelo reconhecimento.

  • detalhes do resultado
    Tabela

    Estrutura dos detalhes do resultado do OCR
    {
    {
    ["y"] = number_value,
    ["x"] = number_value,
    ["w"] = number_value,
    ["h"] = number_value,
    ["confidence"] = number_value(0.0000 ~ 1.0000),
    ["text"] = string_value,
    },
    ...
    }

Observações

Os parâmetros de coordenadas e valores retornados por esta função são afetados pelo sistema inicializado por screen.init.
Para manter a compatibilidade retroativa, quando nenhum mecanismo é especificado, o mecanismo tesseract obsoleto é usado por padrão.
Os mecanismos de reconhecimento Apple e PaddleLite só são compatíveis a partir da versão 1.3.8 do software.
Modelo PaddleLite comum em chinês simplificado (requer descompactação)
Modelo PaddleLite completo em chinês simplificado (requer descompactação)
Modelo PaddleLite de reconhecimento de chinês tradicional (requer descompactação)
Modelo PaddleLite de reconhecimento de letras e números em inglês (requer descompactação)
Modelo PaddleLite de reconhecimento de japonês (requer descompactação)
Modelo PaddleLite de reconhecimento de coreano (requer descompactação)
Também é possível baixar o modelo correspondente na lista de modelos PaddleOCR, convertê-lo em det_opt.nb, cls_opt.nb e rec_opt.nb, e então usá-lo com o dict.txt correspondente.

Exemplo

-- exemplo para a versão 1.3.8 ou posterior
txt, info = screen.ocr_text(187, 882, 298, 914, "en-US") -- no iOS 13 ou posterior, usa o modelo en-US integrado da Apple para reconhecer letras e números em inglês
sys.toast("识别结果:"..txt:atrim())

txt, info = screen.ocr_text(187, 882, 298, 914, "zh-Hans") -- no iOS 14 ou posterior, usa o modelo zh-Hans integrado da Apple para reconhecer chinês simplificado
sys.toast("识别结果:"..txt:atrim())

txt, info = screen.ocr_text(187, 882, 298, 914, {
engine = "apple", -- usa o mecanismo Apple
lang = "zh-Hans" -- usa o modelo de reconhecimento de chinês simplificado
}, "9D5D39-0F1F26,D3D3D2-2C2C2D")
sys.toast("识别结果:"..txt:atrim())

txt, info = screen.ocr_text(0, 0, 0, 0, {
engine = "paddle", -- usa o mecanismo OCR PaddleLite
lang = "ppocr_ch", -- usa o modelo ppocr_ch
})
sys.toast("识别结果:"..txt:atrim())

Observação: o código acima usa as funções sys.toast e string.atrim, que não pertencem a este capítulo.

Legado de versões antigas (não recomendado)

O tesseract integrado não é mais recomendado; para manter a compatibilidade com scripts antigos, ele ainda é o mecanismo OCR padrão na versão atual do XXTouch.
O mecanismo OCR integrado padrão é o tesseract 3.02; uma versão incorreta ou arquivos de fontes danificados podem fazer o serviço de scripts do XXTouch falhar.
O XXTouch já inclui a biblioteca de reconhecimento eng [A-Za-z0-9], capaz de reconhecer letras e números comuns em inglês.
Para reconhecer chinês simplificado ou outros idiomas,
importe manualmente os arquivos de fontes correspondentes para o diretório /var/mobile/Media/1ferver/tessdata/ do dispositivo.
Arquivo de fontes em chinês simplificado (requer descompactação)

Exemplo legado de versão antiga (não recomendado)

-- exemplo 1:
local txt = screen.ocr_text(187, 882, 298, 914) -- a configuração padrão usa o mecanismo tesseract no modo de letras e números em inglês
sys.toast("识别结果:"..txt:atrim())
--
-- exemplo 2:
local txt = screen.ocr_text(465, 241, 505, 269, "eng", "9D5D39-0F1F26,D3D3D2-2C2C2D") -- usa binarização por desvio de cor no reconhecimento
sys.toast("识别结果:"..txt:atrim())
--
-- exemplo 3:
local txt = screen.ocr_text(465, 241, 505, 269, "eng", { {0x9D5D39, 0x0F1F26}, {0xD3D3D2, 0x2C2C2D} }) -- usa binarização por desvio de cor no reconhecimento, como acima
sys.toast("识别结果:"..txt:atrim())
--
-- exemplo 4:
local txt = screen.ocr_text(187, 882, 298, 914, {
lang = "chi_sim", -- usa a biblioteca tesseract de chinês simplificado (a biblioteca não é integrada)
white_list = "你我他", -- define a lista de permissões como "你我他"
})
sys.toast("识别结果:"..txt:atrim())
--
-- exemplo 5:
local txt = screen.ocr_text(187, 882, 298, 914, {
lang = "eng",
white_list = "1234567890", -- usa uma lista de permissões personalizada para reconhecer somente números
}, "9D5D39-0F1F26,D3D3D2-2C2C2D") -- usa binarização por desvio de cor no reconhecimento
sys.toast("识别结果:"..txt:atrim())