2024-8-9-baidu文心一言批量提交图片解析

这两天开始测试midjourney自动blend批量生产建筑装饰创新,目前遇到的问题是经常会退出断线,断线频率在1小时左右,原因目前不明,要保证每组blend尽量少的损失么,把单次自动暂停设置为40分钟比较好,省的总是心里不踏实要两边跑。在下载方面为了避免频道闪退,在一开始保证prefer auto dm即可把输出给到midjourney bot而且这样做不用按u键放大,在浏览器打开图片,用copytab插件批量复制url,再用wfdownloadapp批量下载图片。大约50分钟停一下去房间里新开一个频道,然后o键继续,目前由于是刚开始还没适应这种模式,其实这个模式倒是蛮符合我开始设定的每天定时工作流的。

几天下来,差不多是一天200个图,这还是我有选择的下载并不是所有的图。目前我还没有明确的下载依据,就是随着眼缘。一开始用这套自动化程序的目的是为了产出新的建筑装饰、多样的房型排列、图案、雕塑。目前我还没有进一步对产出的图做系列扩展,在midjourney本身的体系是用vary strong/vary sutble来扩展,那样虽然连续性高,但是难以从住宅、办公楼、医院、学校、商场这样的不同建筑类型来形成系列。我们说罗马建筑、art deco建筑、中式建筑等等都伴随着一些建筑装饰、部件、图案、雕塑应用在不同功能的建筑上。比如希腊柱式用到艾欧尼亚建筑可以在市政厅、财宝储藏室、神殿、运动场、剧院等多种建筑上。在midjourney中的扩展,我的思路是/imagine a building/an apartment building/a city hall/a shopping mall + 图片链接 –iw 2-3 iw越高风格和原图越像,这样可以使一个局部装饰部件或者完整的建筑转化为指定的建筑类型,从而扩展出全系列建筑,甚至可以通过图片本身的特征自定义出一种全新功能的建筑。就好比剧院、运动场这些,中式建筑基本是空白,那有没有可能构造出来?更进一步就是构造出当今世界还不存在的建筑类型,那么是先有某种活动还是先有某种建筑?像下面3组图,一眼望去会觉得很诡异,确实有许多一时间难以用语言形容的部件、材质、布局、色彩、装饰手法,但同时很难去构思说这样的装饰传达了什么情感可以作为什么历史上从未出现过的建筑功能,衍生出独特的人文,这部分可以让文心一言ai试试看。

在做这些程序时,不知不觉就会迷失了,像以前一个漫画中说的在投了10亿和几十年的研究后已经忘记了最初要研究什么东西了。用midjourney生产建筑装饰创意对我而言是要解决不懂设计的情况下批量快速出创新的设计参考,然后我去建模实现变成场景从而实现设计的落地和我的冠名权,由于ai可以生产大量的创意,理想状态下我能在短时间内落地许多风格的建筑装饰创新从而成为古往今来不可描述的大宗师、大豪杰。要落地参考图的话一方面是建模技术、景观布置技术可以跟得上,一开始是拿现成的su项目导入,根据效果图临摹做材质、景观表现。在进一步就是像下图这样从一个平面规划图、到景观布置图,

可以看的出来,设计院、设计公司一般是先把建筑和道路位置在指定地块设定好之后再做初步的绿化、水景设定。然后白模初步摆放。不同分区找实景效果图、参考图,细化制作。如果完全按着midjourney参考图按图索骥那等于说是放弃既定地形和道路,到时候要延伸扩展分区合并将变成一个完全不可控的工作,因此可以说是要结合创意的无限性和布局的限制性,所以当布局确定时最好是希望创新的建筑装饰也有类似布局的参考还能搭配上景观。

图片文件分类归档将是一个很大的问题,可以预想通过blend混合部件、特征、图案、房型排列产生的建筑装饰图,以目前的blend3来说变幻其中1个、2个原料图,可能可以作为之前一个系列的延伸扩展。那么问题是如何去界定一个系列?我目前为了观察blend的特点,按照日期和原料图打包成一个文件夹。显然随着时间推进会有多个文件夹里的原料图是重合的,而它们的产出可能会和之前有联系,那怎么去“联合”这种关系?目前暂时不清楚,1天产出200个陌生而具有创造力的建筑装饰也让我来不及整理,所以是不是要设定某种程度上的断舍离呢?我在尝试用文字归纳总结时感到有种无从下手的感觉,于是想到ai图生文。

midjourney是我之前接触过最好的图生文,stable diffusion相对而言要差远了,但是用midjourney的话意味着得打断作图,另外它的文字生成无法通过文字指令优化,产出的随机性太强,虽然在特征方面可以提供一些意想不到的点。后来在github上看到一个项目,不过描述质量一般然后是阿里巴巴的通义千问,我第一版做的自动化程序就是针对它的,然而实测后发现通义千问十分弱智,连字数要求都远远不能达到更不要说按照设定的要求。chatgpt需要plus付费版可以识别图片,一个月大概160块钱,我暂时没考虑。最后是百度文心一言,产出的质量是不错的,然而它似乎有多重防自动化提交的检测机制。一开始是上传图片,到了第二轮就会产生什么当前环境异常请更换浏览器,在selenium控制模式下即使手动刷新也不行,然而在正常浏览模式下一次刷新可以解决。后来我发现在windows文件对话框来3轮模拟定位文件夹路径伪装查找文件的过程,可以解决这个问题。在后面遇到的超出智能体预设能力范围暂时不明,我猜可能和待机时长有关系,过于频繁发起图片解析会出问题,于是我把待机加长,并设置期间点击浏览器内的某些位置,随机拉动滚动条。最后是图片上传失败导致后面的进程全部打乱,暂时还没实测中解决,理论上在图片提交后检测html有没有“上传失败”,然后pyautogui去点击上传失败的大叉删除上传失败的图片,设定一个while true continue的循环逻辑,当检测到上传失败则continue回到这个循环的开头这样能保证再次发起对当前这个图片上传的请求,直到上传成功再向下执行后面的程序填充输入框文字指令、发送请求。在txt输出完成后break彻底跳出当此循环,到外层的循环对下一个图片发起上传请求。

图片上传失败这种情景手动删除再手动上传是可以发送请求的,我推测是网络问题导致的,台式电脑的无线网经常会自动切换、掉线啥的,正好碰上不巧等于是没网了上传了一半。

有了midjourney自动生成创意和文心一言自动生成描述么,我想可以先做些宣发了,比如每天固定更新一些建筑装饰到小红书、知乎、bilibili甚至youtube、tiktok?多开几个账号?

进一步测试我发现百度文心一言在解析一个pdf文件后再发图片要求它用pdf所学的内容去分析图片暂时不可行,暂时不知道有什么办法让它学习一本书然后用这本书的知识来分析特定问题。另外实测了chatpgt plus试用解读图片,效果一般般,和百度半斤八两吧。

文心一言批量解读图片
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
  

import os
import time
import random
import pyautogui
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

# 指定本地Chromedriver的路径
chromedriver_path = 'E:\\kimi_analyze\\chromedriver-win64\\chromedriver.exe' # 替换为您本地的ChromeDriver路径

# 创建Service对象
service = Service(executable_path=chromedriver_path)

# 设置ChromeOptions
options = Options()
options.add_argument('lang=zh_CN.UTF-8')
# 更换头部
options.add_argument('user-agent="Mozilla/5.0 (iPod; U; CPU iPhone OS 2_1 like Mac OS X; ja-jp) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5F137 Safari/525.20"')

options.add_argument(r'--user-data-dir=C:/Users/A/AppData/Local/Google/Chrome/User Data')

# 创建Chrome浏览器实例
driver = webdriver.Chrome(service=service, options=options)

# 打开目标网页
url = 'https://yiyan.baidu.com/chat/4544202670' # 替换为实际的网页URL
driver.get(url)
time.sleep(5)

# 文件夹路径
folder_path = 'F:/midjourney_blend_Record/20240804/bbb' # 替换为实际的文件夹路径
folder_paths_random = [
"E:/kimi_analyze/abb",
"E:/kimi_analyze/bab",
"E:/kimi_analyze/you",
"E:/hanghai",
"E:/midjourney",
"E:/MyDrivers",
"E:/pytorch3d",
"E:/pythonstudy",
"E:/painteruvtest1",
"E:/unrealhoudiniplugin"
]

zishus = [
"1100",
"1122",
"955",
"999",
"1111",
"1133",
"966",
"977",
"988",
"1199"
]


# 获取文件列表
files = [f for f in os.listdir(folder_path) if f.lower().endswith(('.png', '.jpg', '.jpeg'))]

# TXT 文件路径
txt_file_path = 'E:/kimi_analyze/chromedriver-win64/BaiduPicRecognize2.txt' # 替换为你的TXT文件路径

# 读取 TXT 文件内容
with open(txt_file_path, 'r', encoding='utf-8') as txt_file:
file_content = txt_file.read()

def check_upload_failure():
"""
检查网页上是否有上传失败的提示
"""
try:
# 等待失败提示出现
failure_element = WebDriverWait(driver, 5).until(
EC.presence_of_element_located((By.XPATH, "//span[text() = '上传失败']"))
)
print("检测到上传失败的提示")
return True
except:
print("未检测到上传失败的提示")
return False

def handle_upload_failure():
"""
处理上传失败的图片
"""
print("处理上传失败的图片")
pyautogui.click(1657, 1690) # 点击删除按钮
time.sleep(2) # 等待删除完成
print("已删除上传失败的图片")


def focus_file_name_input():
"""
将光标聚焦到文件名输入框
"""
pyautogui.click(954, 984)

def set_file_dialog_path(path):
"""
设置文件对话框的地址栏路径
"""
pyautogui.click(904, 65) # 聚焦地址栏
time.sleep(1)
pyautogui.write(path) # 输入路径
pyautogui.press('enter') # 确认路径
time.sleep(2) # 等待路径加载完成

def copy_files_to_clipboard(file_paths):
"""
复制文件到剪贴板
"""
import win32clipboard
from win32con import CF_UNICODETEXT

# Copy files to clipboard
file_list = '\n'.join(file_paths)
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardData(CF_UNICODETEXT, file_list)
win32clipboard.CloseClipboard()

def paste_files():
"""
粘贴剪贴板中的文件到对话框
"""
pyautogui.hotkey('ctrl', 'v')

def get_latest_response(driver, image_file_name):
"""
获取包含指定图片文件名的最新回复内容
"""
response_elements = WebDriverWait(driver, 10).until(
EC.presence_of_all_elements_located((By.XPATH, '//div[@class=\'q4y8uP0A\']//div[@id=\'answer_text_id\']'))
)

for response_element in reversed(response_elements):
response_text = response_element.text
# print(f"Found response: {response_text}") # Debug print
if image_file_name in response_text:
return response_text

return None

def random_scroll(driver, min_duration=3, max_duration=5):
"""
随机滚动网页条,持续时间在 min_duration 到 max_duration 秒之间。
"""
end_time = time.time() + random.uniform(min_duration, max_duration)

while time.time() < end_time:
# 随机生成滚动次数
num_scrolls = random.randint(3, 5) # 可以调整为所需的滚动次数范围

for _ in range(num_scrolls):
ActionChains(driver).key_down(Keys.PAGE_UP).key_up(Keys.PAGE_UP).perform()
time.sleep(random.uniform(0.5, 0.9))

for _ in range(num_scrolls):
ActionChains(driver).key_down(Keys.PAGE_DOWN).key_up(Keys.PAGE_DOWN).perform()
time.sleep(random.uniform(0.6, 0.8))


# 循环上传图片文件
for file in files:
file_path = os.path.join(folder_path, file)
file_name = os.path.basename(file_path)

while True: # 循环直到图片上传成功
try:
print(f"开始上传文件: {file_name}")
pyautogui.click(1625, 1778)
time.sleep(2)

# 设置文件对话框的地址栏路径
set_file_dialog_path(folder_path)
time.sleep(1)
folder_path_random = random.choice(folder_paths_random)
set_file_dialog_path(folder_path_random)
time.sleep(1)
set_file_dialog_path(folder_path)

# 将光标聚焦到文件名输入框
focus_file_name_input()
time.sleep(2)
# 复制文件路径到剪贴板
copy_files_to_clipboard([file_name])

# 使用 pyautogui 粘贴文件
paste_files()
time.sleep(2)
pyautogui.press('enter') # 提交命令
print("提交上传图片命令")
# 等待文件上传完成
time.sleep(8) # 等待8秒钟
if check_upload_failure():
print("检测到上传失败")
time.sleep(2)
handle_upload_failure()
time.sleep(2)
continue # 重新上传图片



zishu = random.choice(zishus)
# random_content = random.choice(random_contents)
# 输入内容到对话框
content = f"用{zishu}字中文详细描述我本次发送的图片,以“{file_name}”展示了为开头,"
send_content = content + file_content

dialog_input = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, "//div[@class='yc-editor-wrapper']/div[@class='yc-editor' and @contenteditable='true']"))
)
dialog_input.click()
dialog_input.clear()
dialog_input.send_keys(send_content)
print("内容已发送到对话框")
time.sleep(8) # 等待15秒钟
print("点击提交按钮")

pyautogui.click(3113, 2002) # 点击提交按钮,提交图片和文字指令

# submit_button = WebDriverWait(driver, 10).until(
# EC.element_to_be_clickable((By.XPATH, "//span[contains(@class, 'VAtmtpqL')]"))
# )
# submit_button.click()

# 等待1.5分钟
time.sleep(65)
pyautogui.click(997, 1340)


random_integer = random.randint(66, 88)
time.sleep(random_integer)

response_content = get_latest_response(driver, file_name)
if response_content:
with open(os.path.join(folder_path, f'{file_name}_response.txt'), 'w', encoding='utf-8') as response_file:
response_file.write(response_content)
else:
print(f"No response found for {file_name}")

time.sleep(random_integer/12)
pyautogui.click(997, 1340)
# random_scroll(driver)
time.sleep(random_integer/12)
# 刷新网页
# pyautogui.click(134, 86)
# time.sleep(2)



except Exception as e:
print(f"Error occurred: {e}")
# 输出堆栈跟踪
import traceback
print(traceback.format_exc())

break # 跳出内层循环,处理下一个文件



# 关闭浏览器
driver.quit()

2024-8-19-midjourney生产图片周期测试以及blend进展 2024-8-5-midjourney共享版批量做图提交定时暂停手动暂停

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×