hcharbonnier/mangatranslation

PHP 漫画自动翻译器(与 Google Cloud Platform 兼容)

1.3.0 2021-12-01 21:32 UTC

README

PHP 漫画自动翻译器库(与 Google Cloud Platform 兼容)

仅 CPU,无 cuda,无 opencv,无本地机器学习

警告

  • 我不是开发者,这个项目运行良好,但代码质量可能不好...
  • 为了获得可接受的结果,您的漫画/漫画原始质量必须接近完美!!
  • 当从中文(漫画)翻译时,Google 翻译工作得很好,但从日语(漫画)翻译时则不太好

前端

如果您想测试库,可以使用以下 example.php 文件或使用专用前端: https://github.com/hcharbonnier/mangatranslation-frontend

翻译示例

源代码

Source

翻译

Translated

工作流程摘要

  • 打开图像(jpeg、png、gif 或 bmp)
  • 检测文本框
  • 检测字体大小
  • 在文本框中 OCR 文本
  • 从文本框中移除旧文本
  • 检查 sqliteDB 是否已为我们已知的当前字符串翻译
  • 使用 Google API 进行翻译(或免费的 Deepl API)
  • 如果可能,扩展文本框
  • 调整翻译字体大小以适应文本框
  • 在相应的文本框中写入翻译
  • 导出图像

已知问题

  • 让我知道

安装

在您的项目中创建一个 composer.json 文件,并添加

{
    "minimum-stability": "dev",
    "require": {
         "hcharbonnier/mangatranslation": ">=1.3.0"
    }
}

然后安装依赖项

composer install
mkdir uploads

需求

  • php-7.4(未与 php<7.4 进行测试,但可能可以工作)
  • php-gd
  • php-openssl
  • php-bcmath
  • php-curl
  • php-sqlite3
  • 配置了翻译和视觉功能的 Google Cloud Platform 项目。(https://cloud.google.com/dataproc/docs/guides/setup-project)
  • 如果您更喜欢 DeepL 翻译,则可以免费使用 DeepL 账户

开发者额外需求

  • php-7.4-xml
  • php-7.4-xmlrpc
  • php-7.4-mbstring

示例

example.php

<?php
require_once __DIR__ . '/vendor/autoload.php'; // Autoload files using Composer autoload

use hcharbonnier\mangatranslation\MangaImage;

$trans=new MangaImage($argv[1]);
$trans->detect_block();
$trans->merge_near_block();
$trans->ocr();
$trans->translate("google");  // possible values are "google" (default) or "deepl" 
$trans->remove_empty_block();
$trans->clean_raw();
$trans->write_translation();
$trans->export($argv[2],90);

然后运行

$ export GOOGLE_APPLICATION_CREDENTIALS=PATH_TO_GOOGLE_PROJECT.json
$ php example.php image.jpg translated.jpg

额外功能

Mangatranslation 可以与自定义前端集成以执行更好的翻译。此功能允许用户与过程交互

获取文本框列表

$trans->get_blocks() : array

手动指定额外的文本框

$trans->add_block($x1,$y1,$x2,$y2,$x3,$y3,$x4,$y4) : void

获取文本框 $id_block 的翻译

$trans->get_block_translation(int $id_block) : string

获取文本框 $id_block 的 OCR

$trans->get_block_ocr(int $id_block) : string

手动指定翻译

//to be call BEFORE translate() !!!
$trans->set_block_translation(int $id_block,"Translated text") : void

手动指定清理后的原始图像

$trans->set_cleaned_raw("toto_clean.jpg") : void