Python调用百度API实现图像清晰度增强
1. 作者介绍
杨春晖,男,西安工程大学电子信息学院,2025级研究生
研究方向:车联网信道估计
电子邮件:270265752@qq.com
2. 项目简介
本项目使用 Python 调用百度智能云“图像清晰度增强”API,实现对本地图片的自动增强处理。
与自行搭建和训练图像增强模型相比,调用云端 API 的方式更加简单。开发者只需要准备图片和接口密钥,通过 Python 程序向百度智能云发送请求,即可获得处理后的图片结果。
2.1 项目功能
图像清晰度增强主要用于改善图片的边缘、纹理和整体清楚程度。对于轻度模糊、图片压缩、截图画质下降等情况,通常可以获得较为明显的视觉改善。
本项目可以应用于动画截图优化、交通场景图片增强、老照片改善和文档图片预处理等场景。
需要说明的是,图像清晰度增强并不能恢复已经完全丢失的信息。如果原图存在严重失焦、分辨率过低或大面积遮挡,最终效果可能比较有限。
2.2 实现流程
本项目采用“本地程序调用云端 AI 服务”的方式完成图像增强。Python 程序负责读取图片、发送请求和保存结果,具体的图像增强处理由百度智能云完成。
整体流程如下:
- 读取本地图片:获取需要处理的图像文件;
- Base64 编码:将图片的二进制数据转换为便于网络传输的文本格式;
- 获取 access_token:使用 API Key 和 Secret Key完成身份认证;
- 调用增强接口:通过 HTTP POST 请求将图片发送给百度智能云;
- 解析返回结果:获取接口返回的增强图片数据;
- 保存处理结果:将 Base64 数据解码并保存为本地图片;
- 生成对比图:将原图和增强图并排展示,方便观察处理效果。
3. 环境配置与服务准备
在运行程序之前,需要先配置Python环境、安装相关依赖,并在百度智能云中开通图像增强服务。
本文使用Windows系统进行测试,推荐使用Anaconda管理Python环境。若电脑中已经存在可用的Python环境,也可以直接使用,无需重复创建。
3.1 Python依赖安装
pip install requests pillow matplotlib
3.2 百度智能云服务开通
本项目调用的是百度智能云“图像增强与特效”服务中的图像清晰度增强接口。
使用前,需要先登录百度智能云控制台,并完成以下操作:
1.登录百度智能云账号;
2.进入“图像增强与特效”服务;
3.完成实名认证;
4.创建一个新的应用;
5.为应用开通图像清晰度增强接口权限;
6.获取API Key和Secret Key;
7.查看当前接口的可用资源和调用次数。

应用创建成功后,平台会生成以下信息:
AppID
API Key
Secret Key
3.3 项目目录结构
完整项目代码下载:夸克网盘分享
项目文件目录

4. 代码实现
本项目的主程序为 baidu_image_enhance.py。程序主要完成身份认证、图片编码、接口调用、结果保存和对比图生成等操作。
4.1 关键代码解析
1. 配置接口密钥与图片路径
API_KEY = ""
SECRET_KEY = ""
INPUT_IMAGE = "input/test.jpg"
OUTPUT_DIR = "output"
API_KEY 和 SECRET_KEY 是调用百度智能云接口所需的身份凭证,需要替换为自己在百度智能云控制台中获取的密钥。
2. 获取 access_token
def get_access_token(api_key, secret_key):
params = {
"grant_type": "client_credentials",
"client_id": api_key,
"client_secret": secret_key
}
response = requests.post(TOKEN_URL, params=params)
result = response.json()
return result["access_token"]
程序使用 API Key 和 Secret Key 向百度智能云认证服务器发送请求,获取 access_token。
3. 图片编码与接口调用
def image_to_base64(image_path):
with open(image_path, "rb") as file:
return base64.b64encode(file.read()).decode("utf-8")
程序首先将本地图片转换为 Base64 字符串,使图片数据能够通过网络请求发送给百度智能云。
随后,通过 HTTP POST 请求调用图像清晰度增强接口:
response = requests.post(
url,
data={"image": image_base64}
)
百度云端完成处理后,会返回增强图片的数据。
4. 保存增强图片与生成对比图
程序将接口返回的 Base64 数据解码并保存为图片文件:
image_data = base64.b64decode(image_base64)
with open(save_path, "wb") as file:
file.write(image_data)
保存增强图片后,程序使用 matplotlib 将原图和增强图左右排列,自动生成对比结果。
4.2 完整代码
下面给出项目主程序 baidu_image_enhance.py 的完整代码。
import base64
from pathlib import Path
import requests
import matplotlib.pyplot as plt
from PIL import Image
# 1. 基本信息
STUDENT_NAME = "你的姓名"
STUDENT_ID = "你的学号"
API_KEY = ""
SECRET_KEY = ""
# 2. 文件路径
ROOT = Path(__file__).resolve().parent
INPUT_PATH = ROOT / "input" / "test.jpg"
OUTPUT_DIR = ROOT / "output"
ENHANCED_PATH = OUTPUT_DIR / "test_enhanced.jpg"
COMPARE_PATH = OUTPUT_DIR / "test_compare.png"
# 3. 百度智能云接口地址
TOKEN_URL = "https://aip.baidubce.com/oauth/2.0/token"
ENHANCE_URL = (
"https://aip.baidubce.com/"
"rest/2.0/image-process/v1/image_definition_enhance"
)
# 4. 获取access_token
def get_access_token(api_key, secret_key):
params = {
"grant_type": "client_credentials",
"client_id": api_key,
"client_secret": secret_key
}
response = requests.post(
TOKEN_URL,
params=params,
timeout=20
)
response.raise_for_status()
result = response.json()
if "access_token" not in result:
raise RuntimeError(
f"获取access_token失败:{result}"
)
return result["access_token"]
# 5. 图片转换为Base64
def image_to_base64(image_path):
with open(image_path, "rb") as file:
image_data = file.read()
return base64.b64encode(
image_data
).decode("utf-8")
# 6. 调用图像清晰度增强API
def enhance_image(access_token, image_base64):
url = (
f"{ENHANCE_URL}"
f"?access_token={access_token}"
)
headers = {
"Content-Type":
"application/x-www-form-urlencoded"
}
response = requests.post(
url,
headers=headers,
data={"image": image_base64},
timeout=60
)
response.raise_for_status()
result = response.json()
if "error_code" in result:
raise RuntimeError(
f"图像增强接口调用失败:{result}"
)
image_result = (
result.get("image")
or result.get("result")
)
if not image_result:
raise RuntimeError(
f"接口未返回图片数据:{result}"
)
return image_result
# 7. 保存Base64图片
def save_base64_image(image_base64, save_path):
image_data = base64.b64decode(
image_base64
)
with open(save_path, "wb") as file:
file.write(image_data)
# 8. 生成原图与增强图对比结果
def save_comparison(
original_path,
enhanced_path,
save_path
):
original_image = Image.open(
original_path
).convert("RGB")
enhanced_image = Image.open(
enhanced_path
).convert("RGB")
plt.figure(figsize=(14, 6))
plt.subplot(1, 2, 1)
plt.imshow(original_image)
plt.title("Original Image")
plt.axis("off")
plt.subplot(1, 2, 2)
plt.imshow(enhanced_image)
plt.title("Enhanced Image")
plt.axis("off")
plt.suptitle(
"Baidu API Image Definition Enhancement",
fontsize=18
)
plt.tight_layout()
plt.savefig(
save_path,
dpi=200,
bbox_inches="tight"
)
plt.close()
# 9. 主程序
def main():
print("=" * 60)
print(f"姓名:{STUDENT_NAME}")
print(f"学号:{STUDENT_ID}")
print("项目:Python调用百度API实现图像清晰度增强")
print("=" * 60)
OUTPUT_DIR.mkdir(
parents=True,
exist_ok=True
)
if not INPUT_PATH.exists():
raise FileNotFoundError(
f"输入图片不存在:{INPUT_PATH}"
)
if not API_KEY or not SECRET_KEY:
raise ValueError(
"请先填写API_KEY和SECRET_KEY"
)
print("1. 正在获取access_token")
access_token = get_access_token(
API_KEY,
SECRET_KEY
)
print(" access_token获取成功")
print("2. 正在读取输入图片")
image_base64 = image_to_base64(
INPUT_PATH
)
print(" 图片读取成功")
print("3. 正在调用图像清晰度增强API")
enhanced_base64 = enhance_image(
access_token,
image_base64
)
print(" 图像增强完成")
print("4. 正在保存增强图片")
save_base64_image(
enhanced_base64,
ENHANCED_PATH
)
print(
f" 增强图片已保存:{ENHANCED_PATH}"
)
print("5. 正在生成对比图")
save_comparison(
INPUT_PATH,
ENHANCED_PATH,
COMPARE_PATH
)
print(
f" 对比图已保存:{COMPARE_PATH}"
)
print("=" * 60)
print("程序运行完成")
print("=" * 60)
if __name__ == "__main__":
main()
5. 运行结果与问题总结
5.1 运行结果展示
1. 动画插画图像

增强后,图像线条和角色轮廓更加清楚,色块边缘更加自然,适合动画截图优化和壁纸制作。
2. 交通场景图像

增强后,道路标线、车辆边缘和建筑轮廓更加清楚,适合交通场景优化,但对严重失焦或细节丢失的图片改善有限。
3.影视截图增强

增强后,西瓜纹理、人物轮廓和街道边缘更加清楚,画面整体观感有所提升。虽然不能凭空补出细节,但至少这次看起来更“保熟”了。
5.2 常见问题与解决方法
1. 输入图片不存在
常见报错:
FileNotFoundError: 输入图片不存在:input/test.jpg
解决方法:
检查图片是否放在 input 文件夹中,并确认图片名称为 test.jpg。
2. access_token 获取失败
可能原因包括:
1.API Key或Secret Key填写错误;
2.密钥前后存在多余空格;
3.百度智能云应用未开通图像清晰度增强权限。
建议重新检查控制台中的密钥和服务权限。
3. 增强效果不明显
如果原图本身已经比较清晰,前后变化可能较小;如果原图严重模糊,接口也无法完全恢复已经丢失的细节。
建议选择轻度模糊、边缘清楚、纹理信息较丰富的图片进行测试。
更多推荐
所有评论(0)