Simplify GUI settings and build flags
This commit is contained in:
@@ -1,30 +1,128 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log"
|
||||
"os/exec"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func runPythonOcrFromScreen() error {
|
||||
script := `
|
||||
import sys
|
||||
from pathlib import Path
|
||||
root = Path(r"C:\Users\kenny\Documents\git\messpy\VRC\VRWT_Tool\VRC_OSC")
|
||||
sys.path.insert(0, str(root / "src"))
|
||||
from ocr.ocr_actions import runOcrFromScreen
|
||||
runOcrFromScreen()
|
||||
`
|
||||
type OcrResult struct {
|
||||
ImagePath string
|
||||
TextPath string
|
||||
Text string
|
||||
Translate string
|
||||
ErrReason string
|
||||
}
|
||||
|
||||
func runPythonScript(script string) (string, error) {
|
||||
cmd := exec.Command("python", "-c", script)
|
||||
cmd.Dir = `C:\Users\kenny\Documents\git\messpy\VRC\VRWT_Tool\VRC_OSC`
|
||||
out, err := cmd.CombinedOutput()
|
||||
if len(out) > 0 {
|
||||
log.Printf("ocr output: %s", string(out))
|
||||
SetOCRText(string(out))
|
||||
SetTranslateText("翻訳: 未実装")
|
||||
log.Printf("python output: %s", string(out))
|
||||
}
|
||||
if err != nil {
|
||||
return fmt.Errorf("ocr failed: %w", err)
|
||||
return string(out), fmt.Errorf("python failed: %w", err)
|
||||
}
|
||||
return string(out), nil
|
||||
}
|
||||
|
||||
func capturePythonOcr() (map[string]any, error) {
|
||||
script := `
|
||||
import sys, json
|
||||
from pathlib import Path
|
||||
root = Path(r"C:\Users\kenny\Documents\git\messpy\VRC\VRWT_Tool\VRC_OSC")
|
||||
sys.path.insert(0, str(root / "src"))
|
||||
from ocr.ocr_actions import runOcrFromScreen
|
||||
result = runOcrFromScreen()
|
||||
print(json.dumps(result, ensure_ascii=False))
|
||||
`
|
||||
out, err := runPythonScript(script)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
lines := strings.Split(strings.TrimSpace(out), "\n")
|
||||
for i := len(lines) - 1; i >= 0; i-- {
|
||||
line := strings.TrimSpace(lines[i])
|
||||
if strings.HasPrefix(line, "{") && strings.HasSuffix(line, "}") {
|
||||
var m map[string]any
|
||||
if err := json.Unmarshal([]byte(line), &m); err == nil {
|
||||
return m, nil
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil, fmt.Errorf("ocr result json not found")
|
||||
}
|
||||
|
||||
func runPythonOcrFromScreen() error {
|
||||
log.Printf("ocr trigger begin")
|
||||
result, err := capturePythonOcr()
|
||||
if err != nil {
|
||||
log.Printf("ocr trigger failed: %v", err)
|
||||
SetOCRText("OCRテキストなし")
|
||||
SetTranslateText("翻訳エンジン未設定")
|
||||
_ = AppendRuntimeLog("OCR ERROR", err.Error())
|
||||
return err
|
||||
}
|
||||
text, _ := result["text"].(string)
|
||||
imagePath, _ := result["image_path"].(string)
|
||||
textPath, _ := result["text_path"].(string)
|
||||
if strings.TrimSpace(text) == "" {
|
||||
text = "OCRテキストなし"
|
||||
}
|
||||
SetOCRText(text)
|
||||
SetTranslateText("")
|
||||
_ = AppendRuntimeLog("OCR INPUT", fmt.Sprintf("image=%s\n%s", imagePath, text))
|
||||
if textPath != "" {
|
||||
_ = AppendRuntimeLog("OCR TEXT", fmt.Sprintf("image=%s\ntext_path=%s\n%s", imagePath, textPath, text))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func runPythonTranslationFromLastOCR() error {
|
||||
runtime := SnapshotRuntime()
|
||||
source := strings.TrimSpace(runtime.LastOCRText)
|
||||
if source == "" || source == "OCRテキストなし" {
|
||||
SetTranslateText("OCRテキストなし")
|
||||
_ = AppendRuntimeLog("TRANSLATION ERROR", "OCRテキストなし")
|
||||
return nil
|
||||
}
|
||||
|
||||
log.Printf("translation trigger begin")
|
||||
SetTranslateText("翻訳実行中")
|
||||
_ = AppendRuntimeLog("TRANSLATION INPUT", source)
|
||||
script := `
|
||||
import sys, json
|
||||
from pathlib import Path
|
||||
root = Path(r"C:\Users\kenny\Documents\git\messpy\VRC\VRWT_Tool\VRC_OSC")
|
||||
sys.path.insert(0, str(root / "src"))
|
||||
from translate.translate_actions import translateTextToJapanese, saveTranslationText
|
||||
text = sys.argv[1]
|
||||
translated = translateTextToJapanese(text)
|
||||
print(translated or "")
|
||||
if translated:
|
||||
saveTranslationText("runtime", translated)
|
||||
`
|
||||
cmd := exec.Command("python", "-c", script, source)
|
||||
cmd.Dir = `C:\Users\kenny\Documents\git\messpy\VRC\VRWT_Tool\VRC_OSC`
|
||||
out, err := cmd.CombinedOutput()
|
||||
if len(out) > 0 {
|
||||
log.Printf("translation output: %s", string(out))
|
||||
}
|
||||
if err != nil {
|
||||
SetTranslateText("翻訳失敗")
|
||||
_ = AppendRuntimeLog("TRANSLATION ERROR", err.Error())
|
||||
return err
|
||||
}
|
||||
translated := strings.TrimSpace(string(out))
|
||||
if translated == "" {
|
||||
SetTranslateText("翻訳結果なし")
|
||||
_ = AppendRuntimeLog("TRANSLATION ERROR", "翻訳結果なし")
|
||||
return nil
|
||||
}
|
||||
SetTranslateText(translated)
|
||||
_ = AppendRuntimeLog("TRANSLATION RESULT", translated)
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user