Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

画像処理スレッドが途中で終了する問題 Image Processing Thread Terminates Prematurely #2

Open
NEXTAltair opened this issue Oct 23, 2024 · 0 comments
Assignees
Labels
bug Something isn't working

Comments

@NEXTAltair
Copy link
Owner

画像処理スレッドが途中で終了する問題

Image Processing Thread Terminates Prematurely

問題の概要 / Problem Description

画像処理の設定を変更した後、スレッド処理が正常に完了せずに途中で終了してしまう問題が発生しています。ログ解析の結果、画像処理が実際には実行されていない可能性があります。また、PySide6のスレッド処理に関する警告が発生しています。

The image processing thread appears to complete without actually processing images after changing settings. Log analysis suggests that no actual image processing is taking place. Additionally, PySide6 thread-related warnings are occurring.

具体的な症状 / Specific Symptoms

  1. 解像度512px、アップスケーラーなしの設定では正常に動作

  2. 解像度1024px、アップスケーラーありに設定を変更すると、処理が実行されずに完了

  3. すべての画像に対して "指定解像度の画像は保存済みです" というメッセージが出力される

  4. PySide6のタイマー警告が発生: "QObject::startTimer: Timers cannot be started from another thread"

  5. Works correctly with resolution 512px and no upscaler

  6. With resolution 1024px and upscaler enabled, process completes without actual processing

  7. "Image for specified resolution already exists" message appears for all images

  8. PySide6 timer warning occurs: "QObject::startTimer: Timers cannot be started from another thread"

再現手順 / Steps to Reproduce

  1. アプリケーションを起動
    Launch the application
  2. 解像度を512px、アップスケーラーをNoneに設定
    Set resolution to 512px and upscaler to None
  3. 処理開始ボタンをクリック → 正常に完了
    Click start processing button → Completes successfully
  4. 解像度を1024px、アップスケーラーを選択
    Change resolution to 1024px and select an upscaler (RealESRGAN_x4plus)
  5. 処理開始ボタンをクリック → 処理が実行されずに完了
    Click start processing button → Completes without processing

関連コード / Relevant Code

@Slot()
def on_pushButtonStartProcess_clicked(self):
    try:
        self.initialize_processing()
        if __name__ == "__main__":
            self.process_all_images()
        else:
            self.main_window.some_long_process(self.process_all_images)
    except Exception as e:
        self.logger.error(f"画像処理中にエラーが発生しました: {str(e)}")
        QMessageBox.critical(self, "エラー", f"処理中にエラーが発生しました: {str(e)}")

考えられる原因 / Possible Causes

  1. 解像度チェックのロジックが不正確で、異なる設定でも同じ画像として認識している
    Resolution check logic might be incorrectly identifying images as already processed
  2. アップスケーラー設定の変更が画像処理条件に反映されていない
    Upscaler setting changes are not being reflected in processing conditions
  3. check_processed_image_existsの判定条件が不適切
    Incorrect conditions in check_processed_image_exists
  4. PySide6のスレッド処理でタイマーの初期化が不適切
    Improper timer initialization in PySide6 thread processing

環境 / Environment

  • OS: Windows
  • Python Version: 3.12
  • Qt Version: PySide6
  • アップスケーラー: RealESRGAN_x4plus

追加情報 / Additional Information

ログ出力

17:47:32,515 - ImageEditWidget - DEBUG - 目標解像度の変更: 1024
17:47:33,851 - ImageEditWidget - DEBUG - アップスケーラーの変更: RealESRGAN_x4plus
QObject::startTimer: Timers cannot be started from another thread
17:47:34,877 - ImageDatabaseManager - INFO - 指定解像度の画像は保存済みです: Image id 3103

注意点

  • すべての画像で "指定解像度の画像は保存済みです" というメッセージが出力
  • 設定変更後も実際の画像処理が実行されていない
  • PySide6特有のスレッド処理の問題が発生している可能性
    • タイマーは必ずメインスレッドで開始する必要がある
    • スレッド間の通信にシグナル/スロットを使用する必要がある

@NEXTAltair NEXTAltair added the bug Something isn't working label Oct 23, 2024
@NEXTAltair NEXTAltair self-assigned this Oct 23, 2024
NEXTAltair pushed a commit that referenced this issue Oct 23, 2024
Fixes #2
問題なかった、コーパイロットワークスペースはなぜかエラーで使えない

Vision Model でアノテーション作成時にも手動でのタグ付にも対応
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

When branches are created from issues, their pull requests are automatically linked.

1 participant