google 的新模型,智能文字修图,效果实在是很炸裂。

84 天前
 tool3d
我就用了一个提示词,"把图片中的猫咪修改成柴犬"。

能达到这种效果,是我完全没想到的。

目前 API 这个功能已经上线,免费,并且可以直接命令行来使用! google 真是大善人。

但是我想吐糟一句,google 把所有图片都转成了 base64 ,导致 api json 请求返回巨大。而且很不好写流式图片的加载代码(服务器返回的是 png ,如果是 jpg ,还能边解压边显示)。

3600 次点击
所在节点    程序员
21 条回复
tool3d
84 天前
说一下如何调用 API ,官网暂时没写。

先访问 https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-exp:streamGenerateContent?key=%s

把上传的猫咪图片压缩成 base64, 塞进 json 里的 inline_data 的 data 里。

然后请求的 json 添加这句:"generationConfig":{"response_modalities":["Text","Image"]} 返回的结果,就能生成图文模式了。

注:暂时没有对应的 openai 兼容调用,直接调用 openrouter 这类 API 中转,应该是没办法生成图片和修图的。必须直接调官方的 google api 。
leighton
84 天前
```
但是我想吐糟一句,google 把所有图片都转成了 base64 ,导致 api json 请求返回巨大。而且很不好写流式图片的加载代码(服务器返回的是 png ,如果是 jpg ,还能边解压边显示)。
```

理想的设计是什么样的呢
77158158
84 天前
这个功能,感觉适合电商批量修图?
bskfz
84 天前
crackidz
84 天前
你用 AI Studio 的话,右上角点击“Get Code” 就可以了吧
binux
84 天前
你可以先用 file API https://ai.google.dev/api/files 上传再用 FileData 在 prompt 里引用就好
iorilu
84 天前
有模型可以做到把视频里面嵌入得字幕去掉吗
kneo
84 天前
这不是啥新功能啊,豆包 app 里老早就可以了。api 调用不清楚。
mayli
84 天前
api 不错,尤其可以直接白嫖这一点就遥遥领先了
timelessg
83 天前
# This is a sample Python script.
import base64

# Press ⌃R to execute it or replace it with your code.
# Press Double ⇧ to search everywhere for classes, files, tool windows, actions, and settings.


import requests
import json
import mimetypes
import os

BASE_URL = "https://generativelanguage.googleapis.com"
GEMINI_API_KEY = ""
IMG_PATH_2 = ""
DISPLAY_NAME = "TEXT"

# 获取 MIME 类型和文件大小
MIME_TYPE, _ = mimetypes.guess_type(IMG_PATH_2)
NUM_BYTES = os.path.getsize(IMG_PATH_2)

# 发送初始 resumable 上传请求
data = {"file": {"display_name": DISPLAY_NAME}}
headers = {
"X-Goog-Upload-Protocol": "resumable",
"X-Goog-Upload-Command": "start",
"X-Goog-Upload-Header-Content-Length": str(NUM_BYTES),
"X-Goog-Upload-Header-Content-Type": MIME_TYPE,
"Content-Type": "application/json",
}

response = requests.post(
f"{BASE_URL}/upload/v1beta/files?key={GEMINI_API_KEY}",
headers=headers,
json=data
)

# 提取上传 URL
upload_url = response.headers.get("X-Goog-Upload-URL")
if not upload_url:
print("Failed to get upload URL.")
exit(1)

# 读取文件数据并上传
with open(IMG_PATH_2, "rb") as f:
file_data = f.read()

headers = {
"Content-Length": str(NUM_BYTES),
"X-Goog-Upload-Offset": "0",
"X-Goog-Upload-Command": "upload, finalize"
}

response = requests.post(upload_url, headers=headers, data=file_data)
file_info = response.json()
file_uri = file_info.get("file", {}).get("uri")

if not file_uri:
print("Failed to get file URI.")
exit(1)

print(f"file_uri={file_uri}")

# 生成内容请求
data = {
"contents": [{
"parts": [
{"text": "把全部人脸替换成猫头"},
{"file_data": {"mime_type": "image/jpeg", "file_uri": file_uri}}
]
}],
"generationConfig": {"response_modalities": ["Text", "Image"]}
}
headers = {"Content-Type": "application/json"}

response = requests.post(
f"{BASE_URL}/v1beta/models/gemini-2.0-flash-exp:streamGenerateContent?key={GEMINI_API_KEY}",
headers=headers,
json=data
)

response_json = response.json()
with open("response.json", "w", encoding="utf-8") as f:
json.dump(response_json, f, ensure_ascii=False, indent=4)

try:
for item in response_json: # 遍历列表
candidates = item.get("candidates", [])
for candidate in candidates:
content = candidate.get("content", {})
parts = content.get("parts", [])

for part in parts:
inline_data = part.get("inlineData")
if inline_data and "data" in inline_data:
base64_data = inline_data["data"]
mime_type = inline_data.get("mimeType", "image/png")

# 生成对应的文件扩展名
ext = "jpg" if "jpeg" in mime_type else "png"
output_file = f"output.{ext}"

# 解码 Base64 并保存为图片
image_data = base64.b64decode(base64_data)
with open(output_file, "wb") as img_file:
img_file.write(image_data)

print(f"图片已保存为 {output_file}")
break # 找到第一张就退出
else:
continue
break
else:
continue
break

except Exception as e:
print(f"处理 Base64 数据时出错: {e}")
metalvest
83 天前
@kneo 豆包杂七杂八的功能太多了,宣传没跟上
PositionZero
83 天前
传了个二次元女角色,一直报 unsafe content
Haku
83 天前
@PositionZero 这种肯定有 nsfw 的限制吧
PositionZero
83 天前
@Haku 肯定 SFW 的,把 safety settings 全关了也不行。可能因为图片里疑似未成年?
Suger828
83 天前
我测了一下效果还可以
![img]( )
A90ur5
83 天前
@PositionZero

可能是出图后再由另一个模型判断内容
把原图中的人物换掉不会被挡
rekulas
83 天前
类似技术早就有了,但是完全基于语义理解实现的功能始终还是缺乏约束性,相比而言我还是喜欢国内团队出的模型,可以具体位置精确绘画蒙版然后通过语义进行修改
nicenan
83 天前
@rekulas 是啥模型,有能实现这种效果的开源模型吗?
rekulas
83 天前
@nicenan ReplaceAnything 项目就是,类似项目其实还有好几个
甚至直接基于 ComfyUI 的插件貌似都可以实现,只是对普通人来说可能会麻烦点, 有现成项目的话方便的多
madou
82 天前
生图都那么厉害了,为什么就是让它去掉个水印,直接把中文给干成了乱码

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://yangjunhui.monster/t/1118568

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX