放大查看
首页AI 资讯中心AI 教程语音调用 Gemini API 编辑图片:零代码实现语音控图工作流
📚 AI 教程14 分钟

语音调用 Gemini API 编辑图片:零代码实现语音控图工作流

通过 Gemini Live API 语音输入控制图像编辑,用口语指令完成裁剪、滤镜、风格迁移,配合 Python 脚本实现全流程自动化。

📅 2026年7月6日👁 阅读❤️ 点赞
# Gemini API# 语音控制# 图像编辑# Python# Google AI

从科幻到现实:用说话编辑图片

「把这张照片的背景换成海边,然后给人物加一点复古滤镜」——以前这需要打开 Photoshop,熟练操作各种工具。现在,你只需要对着麦克风说出来,AI 帮你完成。

这篇教程演示如何用 Google Gemini API 实现「语音控制图像编辑」工作流。


需要的工具

工具说明
Python 3.10+运行脚本
Google AI Studio获取 Gemini API Key
google-generativeaiGemini 官方 Python SDK
SpeechRecognition语音转文字
Pillow图像处理
pyaudio麦克风录音

Step 1:获取 Gemini API Key

  1. 访问 Google AI Studio
  2. 登录 Google 账号
  3. 点击「Get API key」→「Create API key」
  4. 复制 API Key 备用

免费额度:Gemini 1.5 Flash 每分钟 15 次请求,每天 1500 次,适合个人项目。


Step 2:安装依赖

bash
pip install google-generativeai SpeechRecognition Pillow pyaudio requests

在 Mac 上安装 pyaudio 可能需要:

bash
brew install portaudio
pip install pyaudio

Step 3:核心代码

voice_image_editor.py

python
import speech_recognition as sr
import google.generativeai as genai
from PIL import Image
import base64
import io
import os

# 配置 API Key
genai.configure(api_key=os.environ.get("GEMINI_API_KEY"))

# 使用 Gemini 1.5 Flash(支持图像理解)
model = genai.GenerativeModel('gemini-1.5-flash')

def capture_voice_command():
    """录制语音并转换为文字"""
    recognizer = sr.Recognizer()
    with sr.Microphone() as source:
        print("🎤 正在监听,请说出你的指令...")
        recognizer.adjust_for_ambient_noise(source, duration=1)
        audio = recognizer.listen(source, timeout=10, phrase_time_limit=15)
    
    try:
        # 使用 Google Speech Recognition(免费)
        command = recognizer.recognize_google(audio, language='zh-CN')
        print(f"📝 识别到指令: {command}")
        return command
    except sr.UnknownValueError:
        print("❌ 无法识别语音,请重试")
        return None
    except sr.RequestError as e:
        print(f"❌ 语音识别服务错误: {e}")
        return None

def image_to_base64(image_path: str) -> str:
    """将图像转换为 base64 格式"""
    with open(image_path, 'rb') as f:
        return base64.b64encode(f.read()).decode('utf-8')

def edit_image_with_gemini(image_path: str, instruction: str) -> str:
    """
    使用 Gemini 分析图片并给出编辑指令,
    返回 Python 代码用于执行编辑操作
    """
    img = Image.open(image_path)
    
    prompt = f"""
    你是一位专业的图像处理工程师。
    用户想要对这张图片执行以下操作:{instruction}
    
    请生成完整的 Python Pillow 代码来实现这个操作。
    
    要求:
    1. 只输出可直接运行的 Python 代码,不要任何解释
    2. 输入图片变量名为 img(PIL.Image 对象)
    3. 输出图片变量名为 result_img
    4. 如果操作无法用 Pillow 实现,输出 # UNSUPPORTED
    
    代码示例格式:
    from PIL import ImageFilter, ImageEnhance
    result_img = img.filter(ImageFilter.BLUR)
    """
    
    # 准备图像数据
    img_bytes = io.BytesIO()
    img.save(img_bytes, format='PNG')
    img_bytes.seek(0)
    
    image_part = {
        "mime_type": "image/png",
        "data": base64.b64encode(img_bytes.read()).decode('utf-8')
    }
    
    response = model.generate_content([prompt, image_part])
    return response.text

def execute_edit(image_path: str, code: str) -> Image.Image:
    """执行 Gemini 生成的编辑代码"""
    img = Image.open(image_path)
    
    # 安全执行(仅允许 PIL 操作)
    local_vars = {'img': img, 'Image': Image}
    
    # 导入常用 PIL 模块
    from PIL import ImageFilter, ImageEnhance, ImageOps
    local_vars.update({
        'ImageFilter': ImageFilter,
        'ImageEnhance': ImageEnhance,
        'ImageOps': ImageOps,
    })
    
    try:
        exec(code, {'__builtins__': {}}, local_vars)
        return local_vars.get('result_img', img)
    except Exception as e:
        print(f"❌ 执行编辑失败: {e}")
        return img

def main():
    """主循环"""
    print("🖼️  AI 语音图像编辑器")
    print("=" * 40)
    
    # 选择要编辑的图片
    image_path = input("请输入图片路径(例如 photo.jpg):").strip()
    if not os.path.exists(image_path):
        print(f"❌ 找不到文件: {image_path}")
        return
    
    print(f"✅ 已加载图片: {image_path}")
    print("\n可用指令示例:")
    print("  - 把图片变成黑白")
    print("  - 增加亮度,让图片更明亮")  
    print("  - 添加模糊效果")
    print("  - 旋转 90 度")
    print("  - 增强对比度")
    print("\n输入 'quit' 退出\n")
    
    current_image = image_path
    save_count = 0
    
    while True:
        print("🎤 请说出你的编辑指令(或按 Enter 用键盘输入):")
        use_keyboard = input().strip()
        
        if use_keyboard.lower() == 'quit':
            break
        
        if use_keyboard:
            command = use_keyboard
        else:
            command = capture_voice_command()
        
        if not command:
            continue
        
        print(f"\n⚙️  正在处理指令: {command}")
        
        # 调用 Gemini 生成编辑代码
        code = edit_image_with_gemini(current_image, command)
        
        if '# UNSUPPORTED' in code:
            print("❌ 该操作暂不支持,请尝试其他指令")
            continue
        
        # 清理代码(去除 markdown 代码块标记)
        code = code.replace('```python', '').replace('```', '').strip()
        
        print(f"📝 生成的代码:\n{code}\n")
        
        # 执行编辑
        result_img = execute_edit(current_image, code)
        
        # 保存结果
        save_count += 1
        base_name = os.path.splitext(image_path)[0]
        save_path = f"{base_name}_edited_{save_count}.png"
        result_img.save(save_path)
        
        print(f"✅ 已保存到: {save_path}")
        
        # 询问是否在当前结果上继续编辑
        continue_edit = input("是否在此基础上继续编辑?(y/n): ").strip().lower()
        if continue_edit == 'y':
            current_image = save_path
    
    print("\n✨ 感谢使用!")

if __name__ == "__main__":
    main()

Step 4:运行

bash
export GEMINI_API_KEY="你的API Key"
python voice_image_editor.py

支持的编辑操作

通过 Gemini 理解指令,以下操作都能实现:

语音指令示例实现方式
「变成黑白」ImageOps.grayscale()
「增加亮度」ImageEnhance.Brightness().enhance(1.5)
「模糊处理」ImageFilter.GaussianBlur(radius=5)
「顺时针旋转90度」img.rotate(-90, expand=True)
「裁剪成正方形」img.crop(...)
「镜像翻转」ImageOps.mirror(img)
「增强对比度」ImageEnhance.Contrast().enhance(2.0)

进阶:集成 Gemini 图像生成

Gemini 2.0 支持直接图像生成和编辑。当你的指令超出 Pillow 能力(如「换背景」「风格迁移」)时,可以调用 Gemini 的图像生成能力:

python
# 需要 Gemini 2.0 Imagen 功能(需申请访问权限)
model_gen = genai.ImageGenerationModel("imagen-3.0-generate-001")

result = model_gen.generate_images(
    prompt=f"基于原图,{user_instruction}",
    reference_image=original_image_base64,
)

总结

这个工作流展示了「语音 → 理解 → 执行」的 AI 自动化链路。Gemini 在其中承担了最难的部分:理解自然语言意图并将其翻译为可执行的代码

随着 Gemini 2.0 Ultra 的多模态能力提升,未来的图像编辑可能真的只需要「说一句话」。

觉得这篇文章有帮助?点个赞支持一下 👇

点赞会记录在本地,不需要登录