From 197e899b8de69edfcdb8d2c02022708b5f755f59 Mon Sep 17 00:00:00 2001 From: HuangHai <10402852@qq.com> Date: Wed, 20 Aug 2025 09:16:44 +0800 Subject: [PATCH] 'commit' --- .gitignore | 1 + dsLightRag/JiMeng/Async_Txt2Img.py | 14 +++ dsLightRag/JiMeng/JmTxt2Img.py | 81 ++++++++++++++++++ .../__pycache__/JmTxt2Img.cpython-310.pyc | Bin 0 -> 5099 bytes 4 files changed, 96 insertions(+) create mode 100644 dsLightRag/JiMeng/Async_Txt2Img.py create mode 100644 dsLightRag/JiMeng/__pycache__/JmTxt2Img.cpython-310.pyc diff --git a/.gitignore b/.gitignore index 3c460d50..5035b170 100644 --- a/.gitignore +++ b/.gitignore @@ -13,4 +13,5 @@ /dsLightRag/.idea /dsLightRag/Topic/ /dsLightRag/Dsideal/YunXiao/Down/ +/dsLightRag/.venv/ diff --git a/dsLightRag/JiMeng/Async_Txt2Img.py b/dsLightRag/JiMeng/Async_Txt2Img.py new file mode 100644 index 00000000..f9a903b4 --- /dev/null +++ b/dsLightRag/JiMeng/Async_Txt2Img.py @@ -0,0 +1,14 @@ +# pip install --user volcengine +from JiMeng.JmTxt2Img import JmTxt2Img +from JiMeng.Kit.JmCommon import JmCommon + +if __name__ == '__main__': + visual_service = VisualService() + + visual_service.set_ak(JmCommon.ak) + visual_service.set_sk(JmCommon.sk) + + prompt = "鸿门宴,室内场景图..." + req = {"req_key": JmTxt2Img.req_key, "prompt": prompt} + resp = visual_service.cv_submit_task(req) + print(resp) \ No newline at end of file diff --git a/dsLightRag/JiMeng/JmTxt2Img.py b/dsLightRag/JiMeng/JmTxt2Img.py index 61a6a8ce..b34fda3f 100644 --- a/dsLightRag/JiMeng/JmTxt2Img.py +++ b/dsLightRag/JiMeng/JmTxt2Img.py @@ -52,6 +52,87 @@ class JmTxt2Img: print(f"保存图片失败: {str(e)}") raise Exception(f"保存图片失败: {str(e)}") + @staticmethod + # 新增一个方法用于查询任务状态 + @staticmethod + def query_task_status(task_id): + """查询任务状态""" + req = {"task_id": task_id} + response_body = JmCommon.do_request("POST", {}, json.dumps(req).encode('utf-8'), "CVProcessStatus") + jo = json.loads(response_body) + + code = jo.get("code") + if not JmErrorCode.is_success(code): + error_msg = JmErrorCode.get_message_by_code(code) + print(f"查询任务状态失败: 错误码={code}, 错误信息={error_msg}") + raise Exception(f"查询任务状态失败: {error_msg}") + + return jo.get("data", {}) + + # 修改generate_image方法,使其支持异步模式 + @staticmethod + def generate_image_async(prompt): + """异步生成图片,返回任务ID""" + req = {"req_key": JmTxt2Img.req_key, "prompt": prompt} + response_body = JmCommon.do_request("POST", {}, json.dumps(req).encode('utf-8'), JmTxt2Img.action) + jo = json.loads(response_body) + + code = jo.get("code") + if not JmErrorCode.is_success(code): + error_msg = JmErrorCode.get_message_by_code(code) + print(f"提交生成图片任务失败: 错误码={code}, 错误信息={error_msg}") + raise Exception(f"提交生成图片任务失败: {error_msg}") + + return jo.get("data", {}).get("task_id") + + # 修改main方法,实现异步轮询 + @staticmethod + def main(): + prompt = "鸿门宴,室内场景图..." # 详细提示词略 + save_image_path = os.path.abspath("../../../../../Text2Img.jpg") + print(f"保存图片路径:{save_image_path}") + + # 1. 提交生成任务 + task_id = JmTxt2Img.generate_image_async(prompt) + print(f"图片生成任务已提交,任务ID: {task_id}") + + # 2. 轮询任务状态 + max_polling_times = 60 # 最多轮询60次 + polling_interval = 5000 # 每5秒查询一次 + polling_count = 0 + + while polling_count < max_polling_times: + try: + polling_count += 1 + print(f"第{polling_count}次查询任务状态...") + task_status = JmTxt2Img.query_task_status(task_id) + + # 检查任务是否完成 + if task_status.get("status") == "completed": + print("图片生成完成!") + # 获取并保存图片 + img_base64 = task_status.get("binary_data_base64", [""])[0] + os.makedirs(os.path.dirname(save_image_path), exist_ok=True) + + if img_base64.startswith('data:image'): + img_base64 = img_base64.split(',')[1] + bytes_data = base64.b64decode(img_base64) + with open(save_image_path, 'wb') as f: + f.write(bytes_data) + print(f"文件保存成功!文件位置: {save_image_path}") + return + elif task_status.get("status") == "failed": + print(f"图片生成失败: {task_status.get('error_msg', '未知错误')}") + return + else: + print(f"任务进行中,当前状态: {task_status.get('status')}") + time.sleep(polling_interval / 1000) + except Exception as e: + print(f"查询任务状态异常: {str(e)}") + time.sleep(polling_interval / 1000) + + print(f"已达到最大轮询次数: {max_polling_times}") + @staticmethod def main(): """主函数,用于测试""" diff --git a/dsLightRag/JiMeng/__pycache__/JmTxt2Img.cpython-310.pyc b/dsLightRag/JiMeng/__pycache__/JmTxt2Img.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c6b613e4da2c3c2bf8f47e61ce42bd1a9e683ba8 GIT binary patch literal 5099 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 literal 0 HcmV?d00001