NovelAI是一个用来画二次元图片的开源算法,陈列方式见 b站链接
二、UIautomation和pywin32UIautomation和pywin32是python的库,次要用于窗口句柄的抓与和收配,原代码顶用于接管、发送QQ群音讯
三、代码 1、AI画图相关通过运用NovelAI代码包里的txt2img.py文件,真现从笔朱到图片的转化:
def txt2img(prompt: str, negative_prompt: str, prompt_style: str, prompt_style2: str, steps: int, sampler_index: int, restore_faces: bool, tiling: bool, n_iter: int, batch_size: int, cfg_scale: float, seed: int, subseed: int, subseed_strength: float, seed_resize_from_h: int, seed_resize_from_w: int, seed_enable_extras: bool, height: int, width: int, enable_hr: bool, scale_latent: bool, denoising_strength: float, *args): p = StableDiffusionProcessingTxt2Img( sd_model=shared.sd_model, outpath_samples=opts.outdir_samples or opts.outdir_txt2img_samples, outpath_grids=opts.outdir_grids or opts.outdir_txt2img_grids, prompt=prompt, styles=[prompt_style, prompt_style2], negative_prompt=negative_prompt, seed=seed, subseed=subseed, subseed_strength=subseed_strength, seed_resize_from_h=seed_resize_from_h, seed_resize_from_w=seed_resize_from_w, seed_enable_extras=seed_enable_extras, sampler_index=sampler_index, batch_size=batch_size, n_iter=n_iter, steps=steps, cfg_scale=cfg_scale, width=width, height=height, restore_faces=restore_faces, tiling=tiling, enable_hr=enable_hr, scale_latent=scale_latent if enable_hr else None, denoising_strength=denoising_strength if enable_hr else None, ) if cmd_opts.enable_console_prompts: print(f"\ntxt2img: {prompt}", file=shared.progress_print_out) processed = modules.scripts.scripts_txt2img.run(p, *args) if processed is None: processed = process_images(p) shared.total_tqdm.clear() generation_info_js = processed.js() if opts.samples_log_stdout: print(generation_info_js) if opts.do_not_show_images: processed.images = [] return processed.images, generation_info_js, plaintext_to_html(processed.info)输入对应的参数后,图像数据存储正在以下位置
txt2img[0][0].save(fullfn)#fullfn是途径 2、QQ群音讯抓与相关接管方面
_get_all_hwnd(hwnd, mouse)用于遍历QQ窗口下的所有控件,用于找到音讯打点器窗口下的所有控件
def _get_all_hwnd(hwnd, mouse): if win32gui.IsWindow(hwnd) and win32gui.IsWindowEnabled(hwnd) and win32gui.IsWindowVisible(hwnd): hwnd_title.update({hwnd: win32gui.GetWindowText(hwnd)})textrefresh(delay)用于点击音讯打点器的刷新按钮,以更新群音讯
def textrefresh(delay): win32gui.EnumWindows(_get_all_hwnd, 0) for wnd in hwnd_title.items(): # print(wnd) if wnd[1] == '音讯打点器': break long_position = win32api.MAKELONG(810, 130) win32api.SendMessage(int(wnd[0]), win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, long_position) win32api.SendMessage(int(wnd[0]), win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, long_position) sleep(delay)之后正在一个while循环里不停获与最新的一条群音讯,并用正则表达式提与指令,以用于后续收配
chat_window = auto.WindowControl(searchDepth=1, ClassName='TXGuiFoundation',) msg_list = chat_window.ListControl(Name='IEMsgView') #找到 list finalmsg = msg_list.GetLastChildControl() msg = finalmsg.Name # print(msg) obj = re.compile(r'.*?\((?P<QQnum>.*?)\)\d{1,}:\d{2}:\d{2}(?P<QQmsg>.*)', re.S) #可拿出 result = obj.findall(msg)须要留心的是“点击刷新按钮”和“获与群音讯”是两个变乱。
差异点是“点击刷新按钮”运用的是win32api,win32gui,win32con库,“获与群音讯”运用的是uiautomation库。
雷同点是那两个收配都是针对“音讯打点器”窗口的。
uiautomation库和win32api,win32gui,win32con库有不少共有的罪能,两者都是对控件停行收配的库,博主正在运用时有所与舍。
应付“点击刷新按钮”需求:uiautomation的点击收配须要占用鼠标,很不便捷,而win32库里有靠山鼠标,果此用于真现“点击刷新按钮”的需求是适宜的。
应付“获与群音讯”需求:win32库须要遍历所有子控件,博主认为那会进步运止光阳,并且定位最后一条群音讯还须要格外的挑选收配,而uiautomation里可以间接挪用GetLastChildControl()办法获得最后一个子控件,而那个最后的子控件恰恰是群内最新的音讯。
至此步调曾经完成为了提与群音讯里的指令的需求
发送方面
fs(fsgs, fsnr)用于向群聊天窗口发送笔朱信息
def fs(fsgs, fsnr): c.OpenClipboard() c.EmptyClipboard() c.SetClipboardData(b.CF_UNICODETEXT, fsnr) c.CloseClipboard() handle = a.FindWindow(None, fsgs) if handle != 0: a.SendMessage(handle, 770, 0, 0) a.SendMessage(handle, b.WM_KEYDOWN, b.VK_RETURN, 0) print('音讯发送乐成!')sendImage(name,imgpath)用于向群聊天窗口发送图片
def sendImage(name,imgpath): im = Image.open(imgpath) im.save('1.bmp') aString = windll.user32.LoadImageW(0, r"1.bmp", win32con.IMAGE_BITMAP, 0, 0, win32con.LR_LOADFROMFILE) #print(aString) if aString != 0: ## 由于图片编码问题 图片载入失败的话 aString 就就是0 w.OpenClipboard() w.EmptyClipboard() w.SetClipboardData(win32con.CF_BITMAP, aString) # 封锁剪贴板 w.CloseClipboard() # 获与qq窗口句柄 handle = win32gui.FindWindow(None, name) if handle == 0: print('未找到窗口!') # 显示窗口 win32gui.ShowWindow(handle, win32con.SW_SHOW) # time.sleep(0.2) # 把剪切板内容粘贴到qq窗口 win32gui.SendMessage(handle, win32con.WM_PASTE, 0, 0) # time.sleep(0.2) # 按下后松开回车键,发送音讯 win32gui.SendMessage(handle, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0) win32gui.SendMessage(handle, win32con.WM_KEYUP, win32con.VK_RETURN, 0)至此步调曾经完成为了向群里发送笔朱和图片的需求
以上是次要的代码,背面还须要设置条件判断群友是不是@了呆板人,以及@呆板人后的指令该怎样运用 ,等等的细节那里省略(不难)
四、代码成效 五、跋文归正也没人看,权当是个人进修记录吧
仅供娱乐,如有侵权请联络我增除
【置顶】旺财宝盒独家揭秘:菜鸟如何快速在网上赚到第一桶金!...
浏览:6284 时间:2022-08-25掘金财聚助手pro脚本卡密教程,支持多个平台自动刷短视频软件...
浏览:49 时间:2024-05-182023离散行业自动化(逻辑算法)六部十层电梯程序设计思路与...
浏览:34 时间:2024-05-14