José Bruno commited on
Commit
68ab3de
·
unverified ·
1 Parent(s): 33ae6b5

ci: Build pt-BR docs and fix Portuguese wording (#481)

Browse files
.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
- - uses: actions/upload-pages-artifact@v4
28
- with:
29
- path: docs/site
 
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 detection conjunta de blocos de texto e balões de fala
18
- - [comic-text-detector](https://huggingface.co/mayocream/comic-text-detector) para masks de segmentation 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 detection 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,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` | object detector | encontra blocos de texto e regiões de balão de fala em uma única passagem |
30
- | `comic-text-detector` | rede de segmentation | produz um mask 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. Detection, segmentation, OCR e inpainting precisam de formatos de saída diferentes:
36
 
37
- - a detection conjunta quer blocos de texto e regiões de balão
38
- - a segmentation quer masks por pixel
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 detection de texto e balão, masks de segmentation, OCR, inpainting e tradução são tratados separadamente.
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[Mask de segmentation]
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 renderer]
23
- H --> K[Renderer]
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
- - detection de texto e balão
32
- - segmentation 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,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
- | Detection de texto e balão | [comic-text-bubble-detector](https://huggingface.co/ogkalu/comic-text-and-bubble-detector) | object detector | encontrar blocos de texto e regiões de balão de fala |
42
- | Segmentation | [comic-text-detector](https://github.com/dmMaze/comic-text-detector) | rede de segmentation de texto | produzir um mask denso 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,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 detection de texto e balão importa em páginas de mangá
51
 
52
- Detection 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,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 detections de texto em valores `TextBlock`
73
- - converte as detections 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 é um mask de segmentation
79
 
80
- Um mask de segmentation é 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,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
- | Mask de segmentation | 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[Mask de segmentation]
94
  B --> D[Crop para OCR]
95
  C --> E[Apagar pixels exatos do texto]
96
  ```
97
 
98
- No Koharu, o caminho de segmentation é 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
- - o mask binário resultante se torna `doc.segment`
103
- - `aot-inpainting` então usa `doc.segment` como o mask de apagar e preencher para o inpainting
104
 
105
- A etapa de limpeza ainda importa porque as probabilidades brutas de segmentation geralmente são suaves e ruidosas. O Koharu aplica threshold na predição e dilata o mask binário 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
- ### Detection 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 detections 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 object detection ao nível de página do que do próprio OCR.
117
 
118
- ### Segmentation: predição densa de texto por pixel
119
 
120
- O caminho `comic-text-detector` do Koharu é segmentation-first. A versão em Rust carrega:
121
 
122
  - um backbone no estilo YOLOv5
123
- - um decoder U-Net para predição de mask
124
- - uma head DBNet opcional para modo de detection completa
125
 
126
- A pipeline de página padrão usa o caminho apenas de segmentation 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 detection 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,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 um mask binário 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,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 segmentation de `comic-text-detector` para `doc.segment`
198
- - o mask de segmentation é atualmente construído 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 masks 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,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
- - [Image segmentation](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
- - [Object detection](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.
 
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 renderer 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á. Detection, OCR e inpainting decidem o que deve acontecer com a página, mas o renderer decide se o resultado ainda se lê como uma página de mangá finalizada em vez de uma sobreposição de debug.
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 renderer em um conjunto familiar de estágios:
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 renderer
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 renderer 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,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
- - detection 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 renderer.
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 renderer 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,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 renderer genérico de texto.
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 renderer 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,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 renderer pode produzir texto vertical CJK que parece intencional e legível em vez de meramente "suportado".
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 renderer ainda está incompleto.
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 renderer 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 renderer 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,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 renderer 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,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 renderer 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 renderer do Koharu é cuidadoso porque a renderização de texto é um problema de sistemas acoplados, não uma etapa final de pintura.
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 troubleshooting, identifique primeiro qual camada está falhando:
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 detection ou OCR ruim em uma página
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 o detection
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
- - [Technical Deep Dive](../explanation/technical-deep-dive.md)
 
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
- - [Troubleshooting](troubleshooting.md)
 
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)