import cv2 import os import json import time import logging import threading import requests import supervision as sv from datetime import datetime from ultralytics import YOLO from flask import Flask,request,Response from multiprocessing import Process, Event app = Flask(__name__) @app.route('/show',methods=['POST']) def show(): # print(request.json) data = request.json["content"] balls = data["balls"] table = data["table"] text = f"table:{table:>3} " for i in range(16): ball = "#" if "ball"+str(i) in balls else " " text += f"| {i} : {ball} " print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'),text) return 'ok' import re @app.route('/mj',methods=['POST']) def mj(): print(request.json) if request.json["progress"] == "100%": print(request.json["imageUrl"]) if request.json['state'] == str(479169837): sendmsg(request.json["imageUrl"],479169837) return 'ok' sendmsg(request.json["imageUrl"],5464741) download_image(request.json["imageUrl"], "MJ", request.json["state"]) return 'ok' @app.route('/cq',methods=['POST']) def cq(): print(request.json) if request.json["post_type"] != "message": return 'ok' if request.json["message_type"] != "group": return 'ok' if request.json["group_id"] != 116277572 and request.json["group_id"] != 479169837: return 'ok' # if request.json["user_id"] != 2132960: # return 'ok' thread = threading.Thread(target=handle, args=(request.json,)) thread.start() return "ok" def handle(data): print(data['raw_message']) # 正则表达式来匹配URL url_pattern = re.compile(r'url=(.*?)\]') # 使用findall来找到所有的URL urls = re.findall(url_pattern, data['raw_message']) result = re.sub(r'\[.*?\]', '', data['raw_message']) result = result.replace('\r\n', '') name = data["sender"]["card"] or data["sender"]["nickname"] base64Array = [] # 输出找到的URL for url in urls: print(url) download_image(url, "QQ", name) # 从URL下载图片 response = requests.get(url) response.raise_for_status() # 如果请求失败,此处将引发异常 # 将图片数据转换为Base64编码的字节数组 image_base64_bytes = base64.b64encode(response.content) # 如果您需要将其转换为字符串,您可以使用.decode('utf-8')将字节数组转换为字符串 image_base64_str = image_base64_bytes.decode('utf-8') # 打印Base64编码的字节数组 # print(image_base64_bytes) base64Array.append('data:image/jpeg;base64,'+image_base64_str) if len(base64Array) == 0: return 'ok' prompt = 'game assets,game ui,animal,flower,plant,forest,cute,baby,magical,spirit,fairy,elf,glowing light,anime style,seeming very happy,from above,ultra detailed,soft,on white background' if result != '': prompt = result # 示例调用 params = { 'base64Array':base64Array, 'notifyHook': 'http://hk.luanhailiang.cn:5000/mj', 'prompt': prompt, 'state': name } if data["group_id"] == 479169837: params['state'] = str(479169837) response = imagine(params) print(response.json()) time.sleep(3) params['prompt'] = prompt + " --iw 2 --niji 5" # params['state'] = name+"_niji" response = imagine(params) print(response.json()) time.sleep(3) params['prompt'] = prompt + " --iw 2 --style raw" # params['state'] = name+"_raw" response = imagine(params) print(response.json()) return 'ok' def download_image(url, t, name): """ 从指定URL下载图片并保存到本地文件。 :param url: 图片的URL。 :param local_filename: 要保存图片的本地文件名。 """ local_filename = f"y:\美术\参考收集\{t}\{name}" if not os.path.exists(local_filename): # 如果目录不存在,则创建它 os.makedirs(local_filename) print(f'目录{local_filename}已创建') local_filename += "\\"+datetime.now().strftime('%Y%m%d_%H%M%S') response = requests.get(url) if response.status_code == 200: # HTTP状态码200表示请求成功 # 获取Content-Type响应头 content_type = response.headers['Content-Type'] # 判断图片格式 ext = "" if 'jpeg' in content_type or 'jpg' in content_type: ext = '.jpg' print('The image is in JPEG format.') elif 'png' in content_type: ext = '.png' print('The image is in PNG format.') elif 'gif' in content_type: ext = '.gif' print('The image is in GIF format.') elif 'webp' in content_type: ext = '.webp' print('The image is in WEBP format.') else: ext = '.png' print(f'Unknown image format: {content_type}') local_filename += ext with open(local_filename, 'wb') as f: f.write(response.content) print(f"Image successfully downloaded to {local_filename}") else: print(f"Error downloading image, HTTP status code: {response.status_code}") import base64 import requests def imagine(params): """ 提交Imagine任务 :param params: imagineDTO,一个字典,包含以下键: - base64Array: 垫图base64数组 - notifyHook: 回调地址, 为空时使用全局notifyHook - prompt: 提示词 - state: 自定义参数 :return: 返回服务器的响应 """ # API端点 url = 'http://127.0.0.1:8080/mj/submit/imagine' # 发送POST请求 response = requests.post(url, json=params) # 如果需要,处理响应(例如,检查响应状态,解析响应主体等) return response def sendmsg(url,id): # 设置 go-cqhttp 服务的 URL 和端口 api_url = 'http://localhost:5700/send_msg' # 设置要发送的消息参数 data = { 'group_id': id, # 接收消息的用户的 QQ 号 'message_type': 'group', # 消息类型 'message': f'[CQ:image,file={url}]' # 消息内容,使用 CQ码 格式 } # 发送 POST 请求到 go-cqhttp 服务 response = requests.post(api_url, data=data) # 输出响应 print(response.json()) if __name__ == '__main__': # # 这是包含URL的示例文本 # text = '[CQ:image,file=42c93be3dbe10bfa79ad93ce1baed561.image,subType=1,url=https://gchat.qpic.cn/gchatpic_new/1183464602/691534145-2408237736-42C93BE3DBE10BFA79AD93CE1BAED561/0?term=2&is_origin=0][CQ:image,file=42c93be3dbe10bfa79ad93ce1baed561.image,subType=1,url=https://gchat.qpic.cn/gchatpic_new/1183464602/691534145-2408237736-42C93BE3DBE10BFA79AD93CE1BAED561/0?term=2&is_origin=0]' # # 正则表达式来匹配URL # url_pattern = re.compile(r'url=(.*?)\]') # # 使用findall来找到所有的URL # urls = re.findall(url_pattern, text) # # 输出找到的URL # for url in urls: # print(url) # # 从URL下载图片 # response = requests.get(url) # response.raise_for_status() # 如果请求失败,此处将引发异常 # # 将图片数据转换为Base64编码的字节数组 # image_base64_bytes = base64.b64encode(response.content) # # 如果您需要将其转换为字符串,您可以使用.decode('utf-8')将字节数组转换为字符串 # image_base64_str = image_base64_bytes.decode('utf-8') # # 打印Base64编码的字节数组 # # print(image_base64_bytes) # # 示例调用 # params = { # 'base64Array': ['data:image/jpeg;base64,'+image_base64_str], # 'notifyHook': 'http://hk.luanhailiang.cn:5000/mj', # 'prompt': 'character design, game assets, game ui, cute, soft', # 'state': '' # } # response = imagine(params) # print(response.json()) app.logger.setLevel(logging.ERROR) app.run("0.0.0.0",port=8000,threaded=True)