KerasモデルがTenserFlow.js用に保存できない問題

Python + TenserFlowで画像分類をやろうと、チュートリアルをシコシコ進めてた。

できあがった、KerasモデルをTenserFlow.js用に保存しようと思ったが、関数「save_keras_model」で下記のエラーが出てしまう….

Exception: Error dumping weights, duplicate weight name kernel

この原因は、まさかのTensertFlow現行版(2.16.1)のバグだった!!
2.15.0にダウングレードしたらすんなり動いた…

Duplicate weight problem #8246

勉強中だから自分のコードが悪いと思ってたぞ、コンチクショー!

pyttsx3がMacでエラーになる

PythonでText to Speechをやろうと思い「pyttsx3」をインストールしたが、エラーで動かない。
iMac + Python3.11だが、全く同じ問題に直面してた人がいた。

で、そのサイトによると “pyttsx3” ではなく “py3-tts“を入れると良いらしい。

pip install py3-tts

“py3-tts”は”pyttsx3″を動かすのに必要なものが色々追加されたパッケージっぽいので、”pyttsx3″が内包されている。
なので、使い方は”pyttsx3″と同じでOK。

お金とか色々気にせずに翻訳させたい!

Pythonから無料で気兼ねなく翻訳できる方法をいくつか調べてみた。

検証環境

MacBook Pro (16インチ, 2019)
プロセッサ:2.3GHz 8コア Intel Core i9
メモリ:16 GB 2667 MHz DDR4

Argos Translate

  • モデルデータをダウンロード済みならオフラインで動かせる
  • 軽量でレスポンスも早いが、精度はイマイチ
  • 日本語は英語にしか対応してない
  • 商用利用もOK(MIT-License)

FuguMT

解説通りにやっても動かない(モデルデータがダウンロードされない)ので、未検証

NLLB-200

  • モデルデータをダウンロード済みならオフラインで動かせる
  • 多言語対応
  • モデルが複数あるので環境に合ったモノを選べる
  • 商用利用不可(CC-BY-NC 4.0)

M2M-100

  • 上記NLLBのオープンソース版
  • モデルデータをダウンロード済みならオフラインで動かせる
  • 多言語対応
  • モデルが複数あるので環境に合ったモノを選べる
  • NLLB-200より少し精度は落ちる
  • 商用利用もOK(MIT-License)

みんなの自動翻訳@TexTra®

  • APIを叩く形式なので、オンライン環境は必須
  • 100近い言語に対応
  • 利用登録や申請などの面倒な手続き不要
  • 商用利用には、専用のライセンス契約が必要

…という事でインテルマックでも遅くない!オフラインでも動く!中国語対応!商用利用可!無料!と、目的が全て網羅された「M2M-100」を使ってみる。
なお、ラズパイ4でも動くらしいので、「Argos Translate」は再検証の予定!

Argos Translateでオフライン翻訳

Argos Translateを使えば、Pythonでオフライン翻訳ができると聞いたので、早速テストしてみた。

まずはモジュールのインストール

pip install argostranslate

GitのExampleにある様にスクリプト書けば動く。

import argostranslate.package
import argostranslate.translate

from_code = "jp"
to_code = "en"

# Download and install Argos Translate package
argostranslate.package.update_package_index()
available_packages = argostranslate.package.get_available_packages()
package_to_install = next(
    filter(
        lambda x: x.from_code == from_code and x.to_code == to_code, available_packages
    )
)
argostranslate.package.install_from_path(package_to_install.download())

# Translate
translatedText = argostranslate.translate.translate("こんにちは、世界!", from_code, to_code)
print(translatedText)

翻訳用のモデルは初回時にユーザーディレクトリに勝手にダウンロードされるのだが、これだと、いまいちファイルの取り回しがめんどくさい。

そこで、自分でダウンロードして、しかるべき場所に配置・管理する方法を調べてみた。

1.翻訳用のモデルをArgos open techからダウンロード
https://www.argosopentech.com/argospm/index/

2.とりあえず、和英と英和用のものを入手(translate-ja_en-1_1.argosmodel、translate-en_ja-1_1.argosmodel)し、スクリプトと同じ階層に配置

3.配置したモデルを利用する形にExampleスクリプトを改造。

import argostranslate.package
import argostranslate.translate

from_code = "jp"
to_code = "en"

jpen_model = "./translate-ja_en-1_1.argosmodel" #日>英用モデル
enjo_model = "./translate-en_ja-1_1.argosmodel" # 英>日用モデル

argostranslate.package.install_from_path(jpen_model)
argostranslate.package.install_from_path(enjo_model)

# Translate
translatedText = argostranslate.translate.translate("こんにちは、世界!", from_code, to_code)
print(translatedText)

長文の翻訳は厳しいし、実用的とはまだ言えないけど、遊ぶ分には問題ないし、お金を気にぜず使えるのは嬉しい!