2023-09-21 12:53:27 +00:00
import cv2
2023-10-07 04:10:22 +00:00
import os
2023-09-21 12:53:27 +00:00
import json
import time
2023-09-22 04:01:37 +00:00
import logging
2023-09-26 10:39:50 +00:00
import threading
2023-09-21 12:53:27 +00:00
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 '
2023-09-25 06:59:37 +00:00
import re
2023-09-22 16:47:15 +00:00
@app.route ( ' /mj ' , methods = [ ' POST ' ] )
def mj ( ) :
print ( request . json )
2023-09-26 10:39:50 +00:00
if request . json [ " progress " ] == " 100 % " :
print ( request . json [ " imageUrl " ] )
2023-10-07 04:10:22 +00:00
if request . json [ ' state ' ] == str ( 479169837 ) :
sendmsg ( request . json [ " imageUrl " ] , 479169837 )
return ' ok '
sendmsg ( request . json [ " imageUrl " ] , 5464741 )
2023-09-26 10:39:50 +00:00
download_image ( request . json [ " imageUrl " ] , " MJ " , request . json [ " state " ] )
2023-09-22 16:47:15 +00:00
return ' ok '
@app.route ( ' /cq ' , methods = [ ' POST ' ] )
def cq ( ) :
2023-09-26 10:39:50 +00:00
print ( request . json )
2023-09-25 06:59:37 +00:00
if request . json [ " post_type " ] != " message " :
return ' ok '
if request . json [ " message_type " ] != " group " :
return ' ok '
2023-10-07 04:10:22 +00:00
if request . json [ " group_id " ] != 116277572 and request . json [ " group_id " ] != 479169837 :
2023-09-25 06:59:37 +00:00
return ' ok '
2023-09-26 10:39:50 +00:00
# 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 ' ] )
2023-09-25 06:59:37 +00:00
# 正则表达式来匹配URL
url_pattern = re . compile ( r ' url=(.*?) \ ] ' )
# 使用findall来找到所有的URL
2023-09-26 10:39:50 +00:00
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 " ]
2023-09-25 06:59:37 +00:00
base64Array = [ ]
# 输出找到的URL
for url in urls :
print ( url )
2023-09-26 10:39:50 +00:00
download_image ( url , " QQ " , name )
2023-09-25 06:59:37 +00:00
# 从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 '
2023-09-26 10:39:50 +00:00
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
2023-09-25 06:59:37 +00:00
# 示例调用
params = {
' base64Array ' : base64Array ,
' notifyHook ' : ' http://hk.luanhailiang.cn:5000/mj ' ,
2023-09-26 10:39:50 +00:00
' prompt ' : prompt ,
' state ' : name
2023-09-25 06:59:37 +00:00
}
2023-10-07 04:10:22 +00:00
if data [ " group_id " ] == 479169837 :
params [ ' state ' ] = str ( 479169837 )
2023-09-26 10:39:50 +00:00
response = imagine ( params )
print ( response . json ( ) )
time . sleep ( 3 )
params [ ' prompt ' ] = prompt + " --iw 2 --niji 5 "
2023-10-07 04:10:22 +00:00
# params['state'] = name+"_niji"
2023-09-26 10:39:50 +00:00
response = imagine ( params )
print ( response . json ( ) )
time . sleep ( 3 )
params [ ' prompt ' ] = prompt + " --iw 2 --style raw "
2023-10-07 04:10:22 +00:00
# params['state'] = name+"_raw"
2023-09-25 06:59:37 +00:00
response = imagine ( params )
print ( response . json ( ) )
2023-09-22 16:47:15 +00:00
return ' ok '
2023-09-26 10:39:50 +00:00
def download_image ( url , t , name ) :
"""
从指定URL下载图片并保存到本地文件 。
: param url : 图片的URL 。
: param local_filename : 要保存图片的本地文件名 。
"""
2023-10-07 04:10:22 +00:00
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 ' )
2023-09-26 10:39:50 +00:00
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 } " )
2023-09-25 06:59:37 +00:00
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
2023-09-26 10:39:50 +00:00
2023-10-07 04:10:22 +00:00
def sendmsg ( url , id ) :
2023-09-26 10:39:50 +00:00
# 设置 go-cqhttp 服务的 URL 和端口
api_url = ' http://localhost:5700/send_msg '
# 设置要发送的消息参数
data = {
2023-10-07 04:10:22 +00:00
' group_id ' : id , # 接收消息的用户的 QQ 号
2023-09-26 10:39:50 +00:00
' message_type ' : ' group ' , # 消息类型
' message ' : f ' [CQ:image,file= { url } ] ' # 消息内容,使用 CQ码 格式
}
# 发送 POST 请求到 go-cqhttp 服务
response = requests . post ( api_url , data = data )
# 输出响应
print ( response . json ( ) )
2023-09-21 12:53:27 +00:00
if __name__ == ' __main__ ' :
2023-09-25 06:59:37 +00:00
# # 这是包含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())
2023-09-26 10:39:50 +00:00
2023-09-22 04:01:37 +00:00
app . logger . setLevel ( logging . ERROR )
2023-09-22 05:59:08 +00:00
app . run ( " 0.0.0.0 " , port = 8000 , threaded = True )