José Bruno commited on
ci: Build pt-BR docs and fix Portuguese wording (#481)
Browse files- .github/workflows/docs.yml +7 -6
- docs/pt-BR/explanation/models-and-providers.md +8 -8
- docs/pt-BR/explanation/technical-deep-dive.md +34 -34
- docs/pt-BR/explanation/text-rendering-and-vertical-cjk-layout.md +17 -17
- docs/pt-BR/how-to/troubleshooting.md +4 -4
- docs/pt-BR/how-to/use-openai-compatible-api.md +1 -1
.github/workflows/docs.yml
CHANGED
|
@@ -21,11 +21,12 @@ jobs:
|
|
| 21 |
with:
|
| 22 |
python-version: 3.x
|
| 23 |
- run: pip install zensical
|
| 24 |
-
- run: zensical build -f docs/zensical.toml --clean
|
| 25 |
-
- run: zensical build -f docs/zensical.ja-JP.toml
|
| 26 |
-
- run: zensical build -f docs/zensical.zh-CN.toml
|
| 27 |
-
-
|
| 28 |
-
|
| 29 |
-
|
|
|
|
| 30 |
- uses: actions/deploy-pages@v4
|
| 31 |
id: deployment
|
|
|
|
| 21 |
with:
|
| 22 |
python-version: 3.x
|
| 23 |
- run: pip install zensical
|
| 24 |
+
- run: zensical build -f docs/zensical.toml --clean
|
| 25 |
+
- run: zensical build -f docs/zensical.ja-JP.toml
|
| 26 |
+
- run: zensical build -f docs/zensical.zh-CN.toml
|
| 27 |
+
- run: zensical build -f docs/zensical.pt-BR.toml
|
| 28 |
+
- uses: actions/upload-pages-artifact@v4
|
| 29 |
+
with:
|
| 30 |
+
path: docs/site
|
| 31 |
- uses: actions/deploy-pages@v4
|
| 32 |
id: deployment
|
docs/pt-BR/explanation/models-and-providers.md
CHANGED
|
@@ -14,11 +14,11 @@ O Koharu baixa automaticamente os modelos de visão necessários na primeira vez
|
|
| 14 |
|
| 15 |
O stack padrão atual inclui:
|
| 16 |
|
| 17 |
-
- [comic-text-bubble-detector](https://huggingface.co/ogkalu/comic-text-and-bubble-detector) para
|
| 18 |
-
- [comic-text-detector](https://huggingface.co/mayocream/comic-text-detector) para
|
| 19 |
- [PaddleOCR-VL-1.5](https://huggingface.co/PaddlePaddle/PaddleOCR-VL-1.5) para reconhecimento de texto por OCR
|
| 20 |
- [aot-inpainting](https://huggingface.co/mayocream/aot-inpainting) para o inpainting padrão
|
| 21 |
-
- [YuzuMarker.FontDetection](https://huggingface.co/fffonion/yuzumarker-font-detection) para
|
| 22 |
|
| 23 |
Alguns modelos são usados diretamente dos repositórios upstream do Hugging Face, enquanto os pesos convertidos em `safetensors` são hospedados no [Hugging Face](https://huggingface.co/mayocream) quando o Koharu precisa de um pacote amigável para Rust.
|
| 24 |
|
|
@@ -26,16 +26,16 @@ Alguns modelos são usados diretamente dos repositórios upstream do Hugging Fac
|
|
| 26 |
|
| 27 |
| Modelo | Tipo de modelo | Por que o Koharu o usa |
|
| 28 |
| ---------------------------- | ---------------------- | ------------------------------------------------------- |
|
| 29 |
-
| `comic-text-bubble-detector` |
|
| 30 |
-
| `comic-text-detector` | rede de
|
| 31 |
| `PaddleOCR-VL-1.5` | modelo de linguagem visual | lê texto recortado em tokens de texto |
|
| 32 |
| `aot-inpainting` | rede de inpainting | reconstrói regiões de imagem mascaradas após a remoção do texto |
|
| 33 |
| `YuzuMarker.FontDetection` | classificador / regressor | estima dicas de fonte e estilo para a renderização |
|
| 34 |
|
| 35 |
-
A escolha de design importante é que o Koharu não usa um modelo para cada tarefa de página.
|
| 36 |
|
| 37 |
-
- a
|
| 38 |
-
- a
|
| 39 |
- o OCR quer texto
|
| 40 |
- o inpainting quer pixels restaurados
|
| 41 |
|
|
|
|
| 14 |
|
| 15 |
O stack padrão atual inclui:
|
| 16 |
|
| 17 |
+
- [comic-text-bubble-detector](https://huggingface.co/ogkalu/comic-text-and-bubble-detector) para detecção conjunta de blocos de texto e balões de fala
|
| 18 |
+
- [comic-text-detector](https://huggingface.co/mayocream/comic-text-detector) para máscaras de segmentação de texto
|
| 19 |
- [PaddleOCR-VL-1.5](https://huggingface.co/PaddlePaddle/PaddleOCR-VL-1.5) para reconhecimento de texto por OCR
|
| 20 |
- [aot-inpainting](https://huggingface.co/mayocream/aot-inpainting) para o inpainting padrão
|
| 21 |
+
- [YuzuMarker.FontDetection](https://huggingface.co/fffonion/yuzumarker-font-detection) para detecção de fonte e cor
|
| 22 |
|
| 23 |
Alguns modelos são usados diretamente dos repositórios upstream do Hugging Face, enquanto os pesos convertidos em `safetensors` são hospedados no [Hugging Face](https://huggingface.co/mayocream) quando o Koharu precisa de um pacote amigável para Rust.
|
| 24 |
|
|
|
|
| 26 |
|
| 27 |
| Modelo | Tipo de modelo | Por que o Koharu o usa |
|
| 28 |
| ---------------------------- | ---------------------- | ------------------------------------------------------- |
|
| 29 |
+
| `comic-text-bubble-detector` | detector de objetos | encontra blocos de texto e regiões de balão de fala em uma única passagem |
|
| 30 |
+
| `comic-text-detector` | rede de segmentação | produz uma máscara de texto para limpeza |
|
| 31 |
| `PaddleOCR-VL-1.5` | modelo de linguagem visual | lê texto recortado em tokens de texto |
|
| 32 |
| `aot-inpainting` | rede de inpainting | reconstrói regiões de imagem mascaradas após a remoção do texto |
|
| 33 |
| `YuzuMarker.FontDetection` | classificador / regressor | estima dicas de fonte e estilo para a renderização |
|
| 34 |
|
| 35 |
+
A escolha de design importante é que o Koharu não usa um modelo para cada tarefa de página. Detecção, segmentação, OCR e inpainting precisam de formatos de saída diferentes:
|
| 36 |
|
| 37 |
+
- a detecção conjunta quer blocos de texto e regiões de balão
|
| 38 |
+
- a segmentação quer máscaras por pixel
|
| 39 |
- o OCR quer texto
|
| 40 |
- o inpainting quer pixels restaurados
|
| 41 |
|
docs/pt-BR/explanation/technical-deep-dive.md
CHANGED
|
@@ -4,7 +4,7 @@ title: Mergulho Técnico Profundo
|
|
| 4 |
|
| 5 |
# Mergulho Técnico Profundo
|
| 6 |
|
| 7 |
-
Esta página cobre a estrutura técnica da pipeline de mangá do Koharu: o que cada modelo faz, como os estágios se encaixam e por que
|
| 8 |
|
| 9 |
## A pipeline da página em termos de implementação
|
| 10 |
|
|
@@ -13,14 +13,14 @@ flowchart TD
|
|
| 13 |
A[Página de entrada] --> B[comic-text-bubble-detector]
|
| 14 |
A --> C[comic-text-detector-seg]
|
| 15 |
B --> D[Blocos de texto + balões]
|
| 16 |
-
C --> E[
|
| 17 |
A --> F[Detector de fonte YuzuMarker]
|
| 18 |
D --> C
|
| 19 |
D --> G[OCR de crop PaddleOCR-VL]
|
| 20 |
E --> H[AOT inpainting]
|
| 21 |
G --> I[LLM local ou remoto]
|
| 22 |
-
F --> J[Dicas de estilo do
|
| 23 |
-
H --> K[
|
| 24 |
I --> K
|
| 25 |
J --> K
|
| 26 |
K --> L[Página renderizada / PSD]
|
|
@@ -28,8 +28,8 @@ flowchart TD
|
|
| 28 |
|
| 29 |
No nível do código, a pipeline pública é `Detect -> OCR -> Inpaint -> LLM Generate -> Render`, mas o estágio detect já está fazendo três trabalhos distintos:
|
| 30 |
|
| 31 |
-
-
|
| 32 |
-
-
|
| 33 |
- estimativa de fonte e cor
|
| 34 |
|
| 35 |
Esse design é intencional. Uma ferramenta de tradução de mangá precisa tanto de estrutura da página quanto de precisão ao nível do pixel.
|
|
@@ -38,8 +38,8 @@ Esse design é intencional. Uma ferramenta de tradução de mangá precisa tanto
|
|
| 38 |
|
| 39 |
| Componente | Modelo padrão | Tipo de modelo | Trabalho principal no Koharu |
|
| 40 |
| --- | --- | --- | --- |
|
| 41 |
-
|
|
| 42 |
-
|
|
| 43 |
| OCR | [PaddleOCR-VL-1.5](https://huggingface.co/PaddlePaddle/PaddleOCR-VL-1.5) | modelo de linguagem visual | ler regiões de texto recortadas em texto Unicode |
|
| 44 |
| Inpainting | [aot-inpainting](https://huggingface.co/mayocream/aot-inpainting) / [manga-image-translator](https://github.com/zyddnys/manga-image-translator) | rede de inpainting de imagem | preencher regiões mascaradas após a remoção do texto |
|
| 45 |
| Dicas de fonte | [YuzuMarker.FontDetection](https://huggingface.co/fffonion/yuzumarker-font-detection) | classificador / regressor de imagem | estimar família da fonte, cores e dicas de traço |
|
|
@@ -47,9 +47,9 @@ Esse design é intencional. Uma ferramenta de tradução de mangá precisa tanto
|
|
| 47 |
|
| 48 |
Alternativas internas opcionais ainda estão disponíveis. As principais são [PP-DocLayoutV3](https://huggingface.co/PaddlePaddle/PP-DocLayoutV3_safetensors) como detector alternativo e engine de análise de layout, [speech-bubble-segmentation](https://huggingface.co/mayocream/speech-bubble-segmentation) como detector dedicado de balões e [lama-manga](https://huggingface.co/mayocream/lama-manga) como inpainter alternativo.
|
| 49 |
|
| 50 |
-
## Por que
|
| 51 |
|
| 52 |
-
|
| 53 |
|
| 54 |
- quais regiões são parecidas com texto
|
| 55 |
- onde estão os balões de fala
|
|
@@ -69,15 +69,15 @@ O Koharu primeiro converte a saída do detector em registros `TextBlock` e depoi
|
|
| 69 |
Na implementação atual, o estágio detect padrão:
|
| 70 |
|
| 71 |
- executa a versão em Candle de `ogkalu/comic-text-and-bubble-detector`
|
| 72 |
-
- converte as
|
| 73 |
-
- converte as
|
| 74 |
- ordena os blocos de texto na ordem de leitura de mangá antes do OCR
|
| 75 |
|
| 76 |
Se você preferir um detector no estilo document-layout, o `PP-DocLayoutV3` ainda está disponível como engine alternativo. Ele simplesmente não é mais o padrão.
|
| 77 |
|
| 78 |
-
## O que é
|
| 79 |
|
| 80 |
-
|
| 81 |
|
| 82 |
Isso é diferente de uma bounding box:
|
| 83 |
|
|
@@ -85,47 +85,47 @@ Isso é diferente de uma bounding box:
|
|
| 85 |
| --- | --- | --- |
|
| 86 |
| Bounding box | região retangular grosseira | seleção de crop para OCR, ordenação, edição na UI |
|
| 87 |
| Polígono | contorno geométrico mais justo | geometria ao nível de linha |
|
| 88 |
-
|
|
| 89 |
|
| 90 |
```mermaid
|
| 91 |
flowchart LR
|
| 92 |
A[Balão de fala] --> B[Caixa de layout]
|
| 93 |
-
A --> C[
|
| 94 |
B --> D[Crop para OCR]
|
| 95 |
C --> E[Apagar pixels exatos do texto]
|
| 96 |
```
|
| 97 |
|
| 98 |
-
No Koharu, o caminho de
|
| 99 |
|
| 100 |
- `comic-text-detector` produz um mapa de probabilidade em escala de cinza
|
| 101 |
- o Koharu aplica threshold e dilata esse mapa com pós-processamento leve
|
| 102 |
-
-
|
| 103 |
-
- `aot-inpainting` então usa `doc.segment` como
|
| 104 |
|
| 105 |
-
A etapa de limpeza ainda importa porque as probabilidades brutas de
|
| 106 |
|
| 107 |
## Como os modelos de visão funcionam em teoria
|
| 108 |
|
| 109 |
-
###
|
| 110 |
|
| 111 |
[ogkalu/comic-text-and-bubble-detector](https://huggingface.co/ogkalu/comic-text-and-bubble-detector) é o detector padrão porque prevê os dois tipos de região com os quais o resto da pipeline mais se importa:
|
| 112 |
|
| 113 |
- regiões parecidas com texto que devem se tornar `TextBlock`s
|
| 114 |
- regiões de balão de fala que devem permanecer disponíveis para o editor e ferramentas downstream
|
| 115 |
|
| 116 |
-
A versão em Candle do Koharu mapeia essas
|
| 117 |
|
| 118 |
-
###
|
| 119 |
|
| 120 |
-
O caminho `comic-text-detector` do Koharu é
|
| 121 |
|
| 122 |
- um backbone no estilo YOLOv5
|
| 123 |
-
- um decoder U-Net para predição de
|
| 124 |
-
- uma head DBNet opcional para modo de
|
| 125 |
|
| 126 |
-
A pipeline de página padrão usa o caminho apenas de
|
| 127 |
|
| 128 |
-
- um modelo que é bom em
|
| 129 |
- um modelo que é bom em primeiro plano de texto ao nível de pixel
|
| 130 |
|
| 131 |
Isso se encaixa muito melhor para limpeza do que depender apenas de caixas.
|
|
@@ -166,7 +166,7 @@ A versão em Candle do Koharu segue de perto a forma de inferência upstream:
|
|
| 166 |
|
| 167 |
1. redimensiona páginas grandes para um lado máximo configurável
|
| 168 |
2. faz padding da imagem de trabalho para um formato múltiplo de 8
|
| 169 |
-
3. alimenta a imagem RGB mascarada mais
|
| 170 |
4. compõe os pixels previstos de volta no tamanho original da imagem
|
| 171 |
|
| 172 |
`lama-manga` ainda está disponível como engine alternativo se você quiser o comportamento baseado em Fourier do LaMa, mas ele não é mais o padrão.
|
|
@@ -194,11 +194,11 @@ O Koharu mantém as etapas de entendimento de imagem locais mesmo quando você e
|
|
| 194 |
Alguns detalhes são fáceis de perder se você ler apenas a documentação de alto nível:
|
| 195 |
|
| 196 |
- o estágio detect padrão é `comic-text-bubble-detector`, não `PP-DocLayoutV3`
|
| 197 |
-
- `comic-text-detector-seg` ainda carrega o caminho apenas de
|
| 198 |
-
-
|
| 199 |
- o OCR é executado em imagens de blocos de texto recortados, não na página inteira original
|
| 200 |
- o wrapper de OCR usa o caminho multimodal do llama.cpp e o prompt de tarefa `OCR:`
|
| 201 |
-
- o inpainting consome `doc.segment`, então
|
| 202 |
- o inpainter padrão é `aot-inpainting`, enquanto `lama-manga` permanece selecionável como alternativa
|
| 203 |
- a predição de fonte é normalizada antes da renderização para que cores próximas do preto e do branco sejam ajustadas para valores mais limpos
|
| 204 |
|
|
@@ -221,10 +221,10 @@ Alguns detalhes são fáceis de perder se você ler apenas a documentação de a
|
|
| 221 |
Essas páginas são úteis se você quiser a teoria geral e diagramas de visão geral antes de mergulhar nos model cards:
|
| 222 |
|
| 223 |
- [Transformada de Fourier](https://en.wikipedia.org/wiki/Fourier_transform)
|
| 224 |
-
- [
|
| 225 |
- [Optical character recognition](https://en.wikipedia.org/wiki/Optical_character_recognition)
|
| 226 |
- [Transformer (arquitetura de deep learning)](https://en.wikipedia.org/wiki/Transformer_(deep_learning_architecture))
|
| 227 |
-
- [
|
| 228 |
- [Inpainting](https://en.wikipedia.org/wiki/Inpainting)
|
| 229 |
|
| 230 |
Esses links da Wikipédia são referências de fundo. Para o comportamento específico do Koharu e as escolhas reais de modelos, prefira os model cards oficiais e a árvore de código-fonte.
|
|
|
|
| 4 |
|
| 5 |
# Mergulho Técnico Profundo
|
| 6 |
|
| 7 |
+
Esta página cobre a estrutura técnica da pipeline de mangá do Koharu: o que cada modelo faz, como os estágios se encaixam e por que detecção de texto e balão, máscaras de segmentação, OCR, inpainting e tradução são tratados separadamente.
|
| 8 |
|
| 9 |
## A pipeline da página em termos de implementação
|
| 10 |
|
|
|
|
| 13 |
A[Página de entrada] --> B[comic-text-bubble-detector]
|
| 14 |
A --> C[comic-text-detector-seg]
|
| 15 |
B --> D[Blocos de texto + balões]
|
| 16 |
+
C --> E[Máscara de segmentação]
|
| 17 |
A --> F[Detector de fonte YuzuMarker]
|
| 18 |
D --> C
|
| 19 |
D --> G[OCR de crop PaddleOCR-VL]
|
| 20 |
E --> H[AOT inpainting]
|
| 21 |
G --> I[LLM local ou remoto]
|
| 22 |
+
F --> J[Dicas de estilo do renderizador]
|
| 23 |
+
H --> K[Renderizador]
|
| 24 |
I --> K
|
| 25 |
J --> K
|
| 26 |
K --> L[Página renderizada / PSD]
|
|
|
|
| 28 |
|
| 29 |
No nível do código, a pipeline pública é `Detect -> OCR -> Inpaint -> LLM Generate -> Render`, mas o estágio detect já está fazendo três trabalhos distintos:
|
| 30 |
|
| 31 |
+
- detecção de texto e balão
|
| 32 |
+
- segmentação de primeiro plano do texto
|
| 33 |
- estimativa de fonte e cor
|
| 34 |
|
| 35 |
Esse design é intencional. Uma ferramenta de tradução de mangá precisa tanto de estrutura da página quanto de precisão ao nível do pixel.
|
|
|
|
| 38 |
|
| 39 |
| Componente | Modelo padrão | Tipo de modelo | Trabalho principal no Koharu |
|
| 40 |
| --- | --- | --- | --- |
|
| 41 |
+
| Detecção de texto e balão | [comic-text-bubble-detector](https://huggingface.co/ogkalu/comic-text-and-bubble-detector) | detector de objetos | encontrar blocos de texto e regiões de balão de fala |
|
| 42 |
+
| Segmentação | [comic-text-detector](https://github.com/dmMaze/comic-text-detector) | rede de segmentação de texto | produzir uma máscara densa de texto para limpeza |
|
| 43 |
| OCR | [PaddleOCR-VL-1.5](https://huggingface.co/PaddlePaddle/PaddleOCR-VL-1.5) | modelo de linguagem visual | ler regiões de texto recortadas em texto Unicode |
|
| 44 |
| Inpainting | [aot-inpainting](https://huggingface.co/mayocream/aot-inpainting) / [manga-image-translator](https://github.com/zyddnys/manga-image-translator) | rede de inpainting de imagem | preencher regiões mascaradas após a remoção do texto |
|
| 45 |
| Dicas de fonte | [YuzuMarker.FontDetection](https://huggingface.co/fffonion/yuzumarker-font-detection) | classificador / regressor de imagem | estimar família da fonte, cores e dicas de traço |
|
|
|
|
| 47 |
|
| 48 |
Alternativas internas opcionais ainda estão disponíveis. As principais são [PP-DocLayoutV3](https://huggingface.co/PaddlePaddle/PP-DocLayoutV3_safetensors) como detector alternativo e engine de análise de layout, [speech-bubble-segmentation](https://huggingface.co/mayocream/speech-bubble-segmentation) como detector dedicado de balões e [lama-manga](https://huggingface.co/mayocream/lama-manga) como inpainter alternativo.
|
| 49 |
|
| 50 |
+
## Por que a detecção de texto e balão importa em páginas de mangá
|
| 51 |
|
| 52 |
+
Detecção não é só "achar caixas ao redor do texto". Em páginas de mangá, ela precisa responder a várias perguntas estruturais:
|
| 53 |
|
| 54 |
- quais regiões são parecidas com texto
|
| 55 |
- onde estão os balões de fala
|
|
|
|
| 69 |
Na implementação atual, o estágio detect padrão:
|
| 70 |
|
| 71 |
- executa a versão em Candle de `ogkalu/comic-text-and-bubble-detector`
|
| 72 |
+
- converte as detecções de texto em valores `TextBlock`
|
| 73 |
+
- converte as detecções de balões em valores `BubbleRegion`
|
| 74 |
- ordena os blocos de texto na ordem de leitura de mangá antes do OCR
|
| 75 |
|
| 76 |
Se você preferir um detector no estilo document-layout, o `PP-DocLayoutV3` ainda está disponível como engine alternativo. Ele simplesmente não é mais o padrão.
|
| 77 |
|
| 78 |
+
## O que é uma máscara de segmentação
|
| 79 |
|
| 80 |
+
Uma máscara de segmentação é um mapa do tamanho da imagem no qual cada pixel indica se ele pertence a uma classe-alvo. No caso do Koharu, essa classe é efetivamente "primeiro plano do texto que deve ser removido mais tarde durante a limpeza".
|
| 81 |
|
| 82 |
Isso é diferente de uma bounding box:
|
| 83 |
|
|
|
|
| 85 |
| --- | --- | --- |
|
| 86 |
| Bounding box | região retangular grosseira | seleção de crop para OCR, ordenação, edição na UI |
|
| 87 |
| Polígono | contorno geométrico mais justo | geometria ao nível de linha |
|
| 88 |
+
| Máscara de segmentação | mapa de primeiro plano por pixel | inpainting e limpeza precisa |
|
| 89 |
|
| 90 |
```mermaid
|
| 91 |
flowchart LR
|
| 92 |
A[Balão de fala] --> B[Caixa de layout]
|
| 93 |
+
A --> C[Máscara de segmentação]
|
| 94 |
B --> D[Crop para OCR]
|
| 95 |
C --> E[Apagar pixels exatos do texto]
|
| 96 |
```
|
| 97 |
|
| 98 |
+
No Koharu, o caminho de segmentação é intencionalmente separado do layout:
|
| 99 |
|
| 100 |
- `comic-text-detector` produz um mapa de probabilidade em escala de cinza
|
| 101 |
- o Koharu aplica threshold e dilata esse mapa com pós-processamento leve
|
| 102 |
+
- a máscara binária resultante se torna `doc.segment`
|
| 103 |
+
- `aot-inpainting` então usa `doc.segment` como a máscara de apagar e preencher para o inpainting
|
| 104 |
|
| 105 |
+
A etapa de limpeza ainda importa porque as probabilidades brutas de segmentação geralmente são suaves e ruidosas. O Koharu aplica threshold na predição e dilata a máscara binária final para que a limpeza cubra bordas e contornos do texto em vez de deixar halos para trás.
|
| 106 |
|
| 107 |
## Como os modelos de visão funcionam em teoria
|
| 108 |
|
| 109 |
+
### Detecção conjunta: blocos de texto e regiões de balão em uma única passagem
|
| 110 |
|
| 111 |
[ogkalu/comic-text-and-bubble-detector](https://huggingface.co/ogkalu/comic-text-and-bubble-detector) é o detector padrão porque prevê os dois tipos de região com os quais o resto da pipeline mais se importa:
|
| 112 |
|
| 113 |
- regiões parecidas com texto que devem se tornar `TextBlock`s
|
| 114 |
- regiões de balão de fala que devem permanecer disponíveis para o editor e ferramentas downstream
|
| 115 |
|
| 116 |
+
A versão em Candle do Koharu mapeia essas detecções em estruturas de dados do documento e, em seguida, ordena os blocos de texto na ordem de leitura de mangá antes do OCR. Conceitualmente, isso está mais próximo de detecção de objetos ao nível de página do que do próprio OCR.
|
| 117 |
|
| 118 |
+
### Segmentação: predição densa de texto por pixel
|
| 119 |
|
| 120 |
+
O caminho `comic-text-detector` do Koharu é segmentação-first. A versão em Rust carrega:
|
| 121 |
|
| 122 |
- um backbone no estilo YOLOv5
|
| 123 |
+
- um decoder U-Net para predição de máscara
|
| 124 |
+
- uma head DBNet opcional para modo de detecção completa
|
| 125 |
|
| 126 |
+
A pipeline de página padrão usa o caminho apenas de segmentação porque o Koharu já obtém blocos de texto de `comic-text-bubble-detector`. Isso significa que o Koharu combina:
|
| 127 |
|
| 128 |
+
- um modelo que é bom em detecção de região ao nível de página
|
| 129 |
- um modelo que é bom em primeiro plano de texto ao nível de pixel
|
| 130 |
|
| 131 |
Isso se encaixa muito melhor para limpeza do que depender apenas de caixas.
|
|
|
|
| 166 |
|
| 167 |
1. redimensiona páginas grandes para um lado máximo configurável
|
| 168 |
2. faz padding da imagem de trabalho para um formato múltiplo de 8
|
| 169 |
+
3. alimenta a imagem RGB mascarada mais uma máscara binária de texto na rede
|
| 170 |
4. compõe os pixels previstos de volta no tamanho original da imagem
|
| 171 |
|
| 172 |
`lama-manga` ainda está disponível como engine alternativo se você quiser o comportamento baseado em Fourier do LaMa, mas ele não é mais o padrão.
|
|
|
|
| 194 |
Alguns detalhes são fáceis de perder se você ler apenas a documentação de alto nível:
|
| 195 |
|
| 196 |
- o estágio detect padrão é `comic-text-bubble-detector`, não `PP-DocLayoutV3`
|
| 197 |
+
- `comic-text-detector-seg` ainda carrega o caminho apenas de segmentação de `comic-text-detector` para `doc.segment`
|
| 198 |
+
- a máscara de segmentação é atualmente construída a partir de thresholding mais dilatação, não do caminho antigo de refinamento ciente de blocos
|
| 199 |
- o OCR é executado em imagens de blocos de texto recortados, não na página inteira original
|
| 200 |
- o wrapper de OCR usa o caminho multimodal do llama.cpp e o prompt de tarefa `OCR:`
|
| 201 |
+
- o inpainting consome `doc.segment`, então máscaras ruins levam diretamente a limpezas ruins
|
| 202 |
- o inpainter padrão é `aot-inpainting`, enquanto `lama-manga` permanece selecionável como alternativa
|
| 203 |
- a predição de fonte é normalizada antes da renderização para que cores próximas do preto e do branco sejam ajustadas para valores mais limpos
|
| 204 |
|
|
|
|
| 221 |
Essas páginas são úteis se você quiser a teoria geral e diagramas de visão geral antes de mergulhar nos model cards:
|
| 222 |
|
| 223 |
- [Transformada de Fourier](https://en.wikipedia.org/wiki/Fourier_transform)
|
| 224 |
+
- [Segmentação de imagens](https://en.wikipedia.org/wiki/Image_segmentation)
|
| 225 |
- [Optical character recognition](https://en.wikipedia.org/wiki/Optical_character_recognition)
|
| 226 |
- [Transformer (arquitetura de deep learning)](https://en.wikipedia.org/wiki/Transformer_(deep_learning_architecture))
|
| 227 |
+
- [Detecção de objetos](https://en.wikipedia.org/wiki/Object_detection)
|
| 228 |
- [Inpainting](https://en.wikipedia.org/wiki/Inpainting)
|
| 229 |
|
| 230 |
Esses links da Wikipédia são referências de fundo. Para o comportamento específico do Koharu e as escolhas reais de modelos, prefira os model cards oficiais e a árvore de código-fonte.
|
docs/pt-BR/explanation/text-rendering-and-vertical-cjk-layout.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
| 1 |
---
|
| 2 |
title: Renderização de Texto e Layout Vertical CJK
|
| 3 |
-
description: Como o
|
| 4 |
---
|
| 5 |
|
| 6 |
# Renderização de Texto e Layout Vertical CJK
|
| 7 |
|
| 8 |
-
A renderização de texto é uma das partes mais difíceis de um tradutor de mangá.
|
| 9 |
|
| 10 |
Uma referência externa útil é [Text Rendering Hates You](https://faultlore.com/blah/text-hates-you/) de Aria Desires. O ponto central se aplica diretamente ao Koharu: a renderização de texto não é um problema linear e limpo, e não existe uma resposta universalmente correta. Layout, shaping, fallback de fonte, rasterização e composição afetam uns aos outros.
|
| 11 |
|
|
@@ -13,7 +13,7 @@ O Koharu não tenta ser um mecanismo completo de publicação desktop. Ele busca
|
|
| 13 |
|
| 14 |
## Por que esse problema é difícil
|
| 15 |
|
| 16 |
-
O artigo do Faultlore divide um
|
| 17 |
|
| 18 |
```mermaid
|
| 19 |
flowchart LR
|
|
@@ -29,7 +29,7 @@ Essa divisão é útil, mas na prática os estágios não permanecem independent
|
|
| 29 |
- você não pode fazer shaping de forma confiável sem conhecer a direção de escrita e as features OpenType
|
| 30 |
- você não pode escolher uma única fonte para todo o texto porque as páginas de mangá misturam scripts, símbolos e emojis
|
| 31 |
- você não pode simplesmente desenhar pontos de código um por um porque o texto real é moldado em runs de glifos
|
| 32 |
-
- você não pode assumir que a caixa de um balão é a mesma coisa que os limites reais de tinta do
|
| 33 |
|
| 34 |
O texto vertical de mangá torna o problema ainda mais difícil:
|
| 35 |
|
|
@@ -40,7 +40,7 @@ O texto vertical de mangá torna o problema ainda mais difícil:
|
|
| 40 |
|
| 41 |
## O que o Koharu realmente faz
|
| 42 |
|
| 43 |
-
No nível da implementação, o
|
| 44 |
|
| 45 |
A pipeline para um `TextBlock` traduzido é aproximadamente:
|
| 46 |
|
|
@@ -74,12 +74,12 @@ O Koharu não força cegamente todo texto CJK para o modo vertical. A heurístic
|
|
| 74 |
|
| 75 |
Isso significa que o layout vertical depende de ambos:
|
| 76 |
|
| 77 |
-
-
|
| 78 |
- a geometria da caixa de texto detectada ou ajustada pelo usuário
|
| 79 |
|
| 80 |
Isso é simples de propósito. Ele corresponde a uma grande parcela do texto de balão de mangá e evita transformar cada legenda mista em texto vertical só porque contém um caractere japonês.
|
| 81 |
|
| 82 |
-
Ainda é uma heurística, não um mecanismo geral de modo de escrita. Isso importa para casos extremos e é um dos limites atuais do
|
| 83 |
|
| 84 |
## Como o CJK vertical é implementado
|
| 85 |
|
|
@@ -96,7 +96,7 @@ Quando o Koharu faz shaping de texto vertical, ele ativa as features OpenType:
|
|
| 96 |
- `vert`
|
| 97 |
- `vrt2`
|
| 98 |
|
| 99 |
-
Essas são as alternativas verticais padrão expostas por fontes que realmente suportam escrita vertical. Essa é uma das principais razões pelas quais o
|
| 100 |
|
| 101 |
Se a fonte tiver substituições apropriadas de glifos verticais, o Koharu pode usá-las. Se a fonte não tiver, o resultado degrada para o que a fonte fornecer.
|
| 102 |
|
|
@@ -127,7 +127,7 @@ Isso cobre casos como:
|
|
| 127 |
- colchetes e marcas de canto
|
| 128 |
- pontos médios e marcas similares
|
| 129 |
|
| 130 |
-
Isso não é cosmético. É uma das razões pelas quais o caminho vertical atual parece mais intencional do que um
|
| 131 |
|
| 132 |
### 5. Pontuação de ênfase é normalizada
|
| 133 |
|
|
@@ -145,7 +145,7 @@ Isso é importante porque:
|
|
| 145 |
- pontuação vertical e formas alternativas de glifos podem ter extensões surpreendentes
|
| 146 |
- glifos de contorno e de bitmap precisam pousar na mesma superfície final de forma confiável
|
| 147 |
|
| 148 |
-
Na prática, essa passagem de limites é uma das razões pelas quais o
|
| 149 |
|
| 150 |
## Por que a saída é boa em balões de mangá
|
| 151 |
|
|
@@ -159,7 +159,7 @@ O Koharu acerta várias coisas de alto valor para o caso comum de mangá:
|
|
| 159 |
- ele centraliza pontuação fullwidth no modo vertical
|
| 160 |
- ele tem testes verificando especificamente a direção de fluxo vertical e a saída vertical em chinês e japonês
|
| 161 |
|
| 162 |
-
Essa combinação é por que o
|
| 163 |
|
| 164 |
## Quão perfeito é?
|
| 165 |
|
|
@@ -176,7 +176,7 @@ O Koharu é melhor entendido como:
|
|
| 176 |
|
| 177 |
## Limites atuais
|
| 178 |
|
| 179 |
-
A base de código é bastante clara sobre onde o
|
| 180 |
|
| 181 |
### O modo de escrita é heurístico
|
| 182 |
|
|
@@ -193,11 +193,11 @@ Isso funciona surpreendentemente bem para balões, mas ainda é uma heurística.
|
|
| 193 |
|
| 194 |
### O suporte da fonte importa muito
|
| 195 |
|
| 196 |
-
As alternativas verticais só ficam tão boas quanto a fonte escolhida permite. Se a fonte do sistema não contiver formas verticais adequadas, o
|
| 197 |
|
| 198 |
### Sem features completas de engine de publicação
|
| 199 |
|
| 200 |
-
O Koharu não está tentando fazer todas as features avançadas de texto que você esperaria de um sistema completo de composição. O
|
| 201 |
|
| 202 |
- anotação ruby
|
| 203 |
- warichu e outras features avançadas de layout japonês
|
|
@@ -206,7 +206,7 @@ O Koharu não está tentando fazer todas as features avançadas de texto que voc
|
|
| 206 |
|
| 207 |
### O tamanho da tradução ainda muda a qualidade do layout
|
| 208 |
|
| 209 |
-
Mesmo com um bom shaping, uma tradução pode simplesmente ser muito longa ou muito desajeitada para o balão disponível. O
|
| 210 |
|
| 211 |
## Por que o Koharu não apenas rotaciona o texto
|
| 212 |
|
|
@@ -222,12 +222,12 @@ Em vez disso, o Koharu empurra o tratamento vertical de volta para os estágios
|
|
| 222 |
|
| 223 |
## Referência externa que vale a leitura
|
| 224 |
|
| 225 |
-
[Text Rendering Hates You](https://faultlore.com/blah/text-hates-you/) é útil porque explica o problema do
|
| 226 |
|
| 227 |
- shaping não é opcional
|
| 228 |
- fontes de fallback são inevitáveis
|
| 229 |
- layout e shaping dependem um do outro
|
| 230 |
- renderização de texto "perfeita" é principalmente uma história que as pessoas contam antes de implementá-la
|
| 231 |
|
| 232 |
-
Se você quer a versão curta: o
|
| 233 |
|
|
|
|
| 1 |
---
|
| 2 |
title: Renderização de Texto e Layout Vertical CJK
|
| 3 |
+
description: Como o renderizador de texto do Koharu funciona, por que a renderização de texto é difícil e o que a implementação atual faz para o layout vertical CJK de mangá.
|
| 4 |
---
|
| 5 |
|
| 6 |
# Renderização de Texto e Layout Vertical CJK
|
| 7 |
|
| 8 |
+
A renderização de texto é uma das partes mais difíceis de um tradutor de mangá. Detecção, OCR e inpainting decidem o que deve acontecer com a página, mas o renderizador decide se o resultado ainda se lê como uma página de mangá finalizada em vez de uma sobreposição de depuração.
|
| 9 |
|
| 10 |
Uma referência externa útil é [Text Rendering Hates You](https://faultlore.com/blah/text-hates-you/) de Aria Desires. O ponto central se aplica diretamente ao Koharu: a renderização de texto não é um problema linear e limpo, e não existe uma resposta universalmente correta. Layout, shaping, fallback de fonte, rasterização e composição afetam uns aos outros.
|
| 11 |
|
|
|
|
| 13 |
|
| 14 |
## Por que esse problema é difícil
|
| 15 |
|
| 16 |
+
O artigo do Faultlore divide um renderizador em um conjunto familiar de estágios:
|
| 17 |
|
| 18 |
```mermaid
|
| 19 |
flowchart LR
|
|
|
|
| 29 |
- você não pode fazer shaping de forma confiável sem conhecer a direção de escrita e as features OpenType
|
| 30 |
- você não pode escolher uma única fonte para todo o texto porque as páginas de mangá misturam scripts, símbolos e emojis
|
| 31 |
- você não pode simplesmente desenhar pontos de código um por um porque o texto real é moldado em runs de glifos
|
| 32 |
+
- você não pode assumir que a caixa de um balão é a mesma coisa que os limites reais de tinta do renderizador
|
| 33 |
|
| 34 |
O texto vertical de mangá torna o problema ainda mais difícil:
|
| 35 |
|
|
|
|
| 40 |
|
| 41 |
## O que o Koharu realmente faz
|
| 42 |
|
| 43 |
+
No nível da implementação, o renderizador vive no crate `koharu-renderer`, e a orquestração principal acontece em `koharu-app/src/renderer.rs`, `src/layout.rs`, `src/shape.rs`, `src/segment.rs` e `src/renderer.rs`.
|
| 44 |
|
| 45 |
A pipeline para um `TextBlock` traduzido é aproximadamente:
|
| 46 |
|
|
|
|
| 74 |
|
| 75 |
Isso significa que o layout vertical depende de ambos:
|
| 76 |
|
| 77 |
+
- detecção de script
|
| 78 |
- a geometria da caixa de texto detectada ou ajustada pelo usuário
|
| 79 |
|
| 80 |
Isso é simples de propósito. Ele corresponde a uma grande parcela do texto de balão de mangá e evita transformar cada legenda mista em texto vertical só porque contém um caractere japonês.
|
| 81 |
|
| 82 |
+
Ainda é uma heurística, não um mecanismo geral de modo de escrita. Isso importa para casos extremos e é um dos limites atuais do renderizador.
|
| 83 |
|
| 84 |
## Como o CJK vertical é implementado
|
| 85 |
|
|
|
|
| 96 |
- `vert`
|
| 97 |
- `vrt2`
|
| 98 |
|
| 99 |
+
Essas são as alternativas verticais padrão expostas por fontes que realmente suportam escrita vertical. Essa é uma das principais razões pelas quais o renderizador pode produzir um layout vertical CJK convincente em vez de parecer texto horizontal rotacionado.
|
| 100 |
|
| 101 |
Se a fonte tiver substituições apropriadas de glifos verticais, o Koharu pode usá-las. Se a fonte não tiver, o resultado degrada para o que a fonte fornecer.
|
| 102 |
|
|
|
|
| 127 |
- colchetes e marcas de canto
|
| 128 |
- pontos médios e marcas similares
|
| 129 |
|
| 130 |
+
Isso não é cosmético. É uma das razões pelas quais o caminho vertical atual parece mais intencional do que um renderizador genérico de texto.
|
| 131 |
|
| 132 |
### 5. Pontuação de ênfase é normalizada
|
| 133 |
|
|
|
|
| 145 |
- pontuação vertical e formas alternativas de glifos podem ter extensões surpreendentes
|
| 146 |
- glifos de contorno e de bitmap precisam pousar na mesma superfície final de forma confiável
|
| 147 |
|
| 148 |
+
Na prática, essa passagem de limites é uma das razões pelas quais o renderizador parece estável em vez de estar constantemente recortando a borda superior, inferior ou direita do texto.
|
| 149 |
|
| 150 |
## Por que a saída é boa em balões de mangá
|
| 151 |
|
|
|
|
| 159 |
- ele centraliza pontuação fullwidth no modo vertical
|
| 160 |
- ele tem testes verificando especificamente a direção de fluxo vertical e a saída vertical em chinês e japonês
|
| 161 |
|
| 162 |
+
Essa combinação é por que o renderizador pode produzir texto vertical CJK que parece intencional e legível em vez de meramente "suportado".
|
| 163 |
|
| 164 |
## Quão perfeito é?
|
| 165 |
|
|
|
|
| 176 |
|
| 177 |
## Limites atuais
|
| 178 |
|
| 179 |
+
A base de código é bastante clara sobre onde o renderizador ainda está incompleto.
|
| 180 |
|
| 181 |
### O modo de escrita é heurístico
|
| 182 |
|
|
|
|
| 193 |
|
| 194 |
### O suporte da fonte importa muito
|
| 195 |
|
| 196 |
+
As alternativas verticais só ficam tão boas quanto a fonte escolhida permite. Se a fonte do sistema não contiver formas verticais adequadas, o renderizador não pode inventar uma fonte CJK profissional completa do zero.
|
| 197 |
|
| 198 |
### Sem features completas de engine de publicação
|
| 199 |
|
| 200 |
+
O Koharu não está tentando fazer todas as features avançadas de texto que você esperaria de um sistema completo de composição. O renderizador atual não é uma implementação completa de coisas como:
|
| 201 |
|
| 202 |
- anotação ruby
|
| 203 |
- warichu e outras features avançadas de layout japonês
|
|
|
|
| 206 |
|
| 207 |
### O tamanho da tradução ainda muda a qualidade do layout
|
| 208 |
|
| 209 |
+
Mesmo com um bom shaping, uma tradução pode simplesmente ser muito longa ou muito desajeitada para o balão disponível. O renderizador pode encaixar e alinhar texto, mas nem sempre consegue transformar uma geometria de bloco ruim ou uma tradução excessivamente verbosa em uma letragem perfeita.
|
| 210 |
|
| 211 |
## Por que o Koharu não apenas rotaciona o texto
|
| 212 |
|
|
|
|
| 222 |
|
| 223 |
## Referência externa que vale a leitura
|
| 224 |
|
| 225 |
+
[Text Rendering Hates You](https://faultlore.com/blah/text-hates-you/) é útil porque explica o problema do renderizador de uma forma agnóstica à linguagem. O stack do Koharu é diferente de um engine de navegador, mas as mesmas lições centrais aparecem aqui:
|
| 226 |
|
| 227 |
- shaping não é opcional
|
| 228 |
- fontes de fallback são inevitáveis
|
| 229 |
- layout e shaping dependem um do outro
|
| 230 |
- renderização de texto "perfeita" é principalmente uma história que as pessoas contam antes de implementá-la
|
| 231 |
|
| 232 |
+
Se você quer a versão curta: o renderizador do Koharu é cuidadoso porque a renderização de texto é um problema de sistemas acoplados, não uma etapa final de pintura.
|
| 233 |
|
docs/pt-BR/how-to/troubleshooting.md
CHANGED
|
@@ -8,7 +8,7 @@ Esta página cobre os problemas mais comuns do Koharu na implementação atual:
|
|
| 8 |
|
| 9 |
## Antes de começar
|
| 10 |
|
| 11 |
-
Ao fazer
|
| 12 |
|
| 13 |
- inicialização da aplicação
|
| 14 |
- downloads de runtime ou modelos
|
|
@@ -116,7 +116,7 @@ Use esta ordem:
|
|
| 116 |
|
| 117 |
Se o export falhar porque não há camada renderizada ou inpainted, rode novamente o estágio que está faltando em vez de tentar exportar repetidamente.
|
| 118 |
|
| 119 |
-
## Qualidade de
|
| 120 |
|
| 121 |
Causas comuns:
|
| 122 |
|
|
@@ -124,7 +124,7 @@ Causas comuns:
|
|
| 124 |
- recortes de página incomuns
|
| 125 |
- tramas pesadas ou scans ruidosos
|
| 126 |
- texto vertical misturado com arte difícil
|
| 127 |
-
- blocos de texto mal colocados ou duplicados após
|
| 128 |
|
| 129 |
Tente isto:
|
| 130 |
|
|
@@ -275,4 +275,4 @@ Nesse ponto, colete:
|
|
| 275 |
- [Configurar Clientes MCP](configure-mcp-clients.md)
|
| 276 |
- [Build a Partir do Código-Fonte](build-from-source.md)
|
| 277 |
- [Referência da CLI](../reference/cli.md)
|
| 278 |
-
- [
|
|
|
|
| 8 |
|
| 9 |
## Antes de começar
|
| 10 |
|
| 11 |
+
Ao fazer diagnóstico de problemas, identifique primeiro qual camada está falhando:
|
| 12 |
|
| 13 |
- inicialização da aplicação
|
| 14 |
- downloads de runtime ou modelos
|
|
|
|
| 116 |
|
| 117 |
Se o export falhar porque não há camada renderizada ou inpainted, rode novamente o estágio que está faltando em vez de tentar exportar repetidamente.
|
| 118 |
|
| 119 |
+
## Qualidade de detecção ou OCR ruim em uma página
|
| 120 |
|
| 121 |
Causas comuns:
|
| 122 |
|
|
|
|
| 124 |
- recortes de página incomuns
|
| 125 |
- tramas pesadas ou scans ruidosos
|
| 126 |
- texto vertical misturado com arte difícil
|
| 127 |
+
- blocos de texto mal colocados ou duplicados após a detecção
|
| 128 |
|
| 129 |
Tente isto:
|
| 130 |
|
|
|
|
| 275 |
- [Configurar Clientes MCP](configure-mcp-clients.md)
|
| 276 |
- [Build a Partir do Código-Fonte](build-from-source.md)
|
| 277 |
- [Referência da CLI](../reference/cli.md)
|
| 278 |
+
- [Mergulho Técnico Profundo](../explanation/technical-deep-dive.md)
|
docs/pt-BR/how-to/use-openai-compatible-api.md
CHANGED
|
@@ -136,4 +136,4 @@ Isso permite manter múltiplos backends compatíveis configurados e alternar ent
|
|
| 136 |
|
| 137 |
- [Modelos e Providers](../explanation/models-and-providers.md)
|
| 138 |
- [Traduza Sua Primeira Página](../tutorials/translate-your-first-page.md)
|
| 139 |
-
- [
|
|
|
|
| 136 |
|
| 137 |
- [Modelos e Providers](../explanation/models-and-providers.md)
|
| 138 |
- [Traduza Sua Primeira Página](../tutorials/translate-your-first-page.md)
|
| 139 |
+
- [Solução de problemas](troubleshooting.md)
|