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. 增强效果不明显

如果原图本身已经比较清晰,前后变化可能较小;如果原图严重模糊,接口也无法完全恢复已经丢失的细节。

建议选择轻度模糊、边缘清楚、纹理信息较丰富的图片进行测试。​

更多推荐