【火山引擎 图像超分python示例代码】
本文展示了使用火山引擎视觉API进行图像超分辨率处理的Python实现。代码包含两个核心部分:一是基于HMAC-SHA256的V4签名认证体系实现,通过signV4Request函数处理请求签名和API调用;二是具体业务实现,通过img2b64函数转换图片为Base64格式,并构造包含模型质量、输出格式等参数的请求体。示例使用6.jpg作为输入,指定中等质量(MQ)和PNG格式输出,最终返回的超分
·
import json
import io
import sys
import base64
import datetime
import hashlib
import hmac
import requests
method = "POST"
host = "visual.volcengineapi.com"
region = "cn-north-1"
endpoint = "https://visual.volcengineapi.com"
service = "cv"
def sign(key, msg):
return hmac.new(key, msg.encode("utf-8"), hashlib.sha256).digest()
def getSignatureKey(key, dateStamp, regionName, serviceName):
kDate = sign(key.encode("utf-8"), dateStamp)
kRegion = sign(kDate, regionName)
kService = sign(kRegion, serviceName)
kSigning = sign(kService, "request")
return kSigning
def formatQuery(parameters):
request_parameters_init = ""
for key in sorted(parameters):
request_parameters_init += key + "=" + parameters[key] + "&"
request_parameters = request_parameters_init[:-1]
return request_parameters
def signV4Request(access_key, secret_key, service, req_query, req_body):
if access_key is None or secret_key is None:
print("No access key is available.")
sys.exit()
t = datetime.datetime.now(datetime.timezone.utc)
current_date = t.strftime("%Y%m%dT%H%M%SZ")
datestamp = t.strftime("%Y%m%d") # Date w/o time, used in credential scope
canonical_uri = "/"
canonical_querystring = req_query
signed_headers = "content-type;host;x-content-sha256;x-date"
payload_hash = hashlib.sha256(req_body.encode("utf-8")).hexdigest()
content_type = "application/json"
canonical_headers = (
"content-type:"
+ content_type
+ "\n"
+ "host:"
+ host
+ "\n"
+ "x-content-sha256:"
+ payload_hash
+ "\n"
+ "x-date:"
+ current_date
+ "\n"
)
canonical_request = (
method
+ "\n"
+ canonical_uri
+ "\n"
+ canonical_querystring
+ "\n"
+ canonical_headers
+ "\n"
+ signed_headers
+ "\n"
+ payload_hash
)
algorithm = "HMAC-SHA256"
credential_scope = datestamp + "/" + region + "/" + service + "/" + "request"
string_to_sign = (
algorithm
+ "\n"
+ current_date
+ "\n"
+ credential_scope
+ "\n"
+ hashlib.sha256(canonical_request.encode("utf-8")).hexdigest()
)
signing_key = getSignatureKey(secret_key, datestamp, region, service)
signature = hmac.new(
signing_key, (string_to_sign).encode("utf-8"), hashlib.sha256
).hexdigest()
authorization_header = (
algorithm
+ " "
+ "Credential="
+ access_key
+ "/"
+ credential_scope
+ ", "
+ "SignedHeaders="
+ signed_headers
+ ", "
+ "Signature="
+ signature
)
headers = {
"X-Date": current_date,
"Authorization": authorization_header,
"X-Content-Sha256": payload_hash,
"Content-Type": content_type,
}
# ************* SEND THE REQUEST *************
request_url = endpoint + "?" + canonical_querystring
try:
r = requests.post(request_url, headers=headers, data=req_body)
except Exception as err:
print(f"error occurred: {err}")
else:
print("\nRESPONSE++++++++++++++++++++++++++++++++++++")
print(f"Response code: {r.status_code}\n")
return r
def img2b64(path):
with open(path, "rb") as f:
img_data = f.read()
b64img = base64.b64encode(img_data).decode("utf-8")
return b64img
# 超分辨率文档 https://www.volcengine.com/docs/6793/1354024
# 请求凭证,从访问控制申请 https://console.volcengine.com/iam/keymanage/
access_key = "AKxxx"
secret_key = "xxx=="
# 请求Query,按照接口文档中填入即可
query_params = {
"Action": "CVProcess",
"Version": "2022-08-31",
}
formatted_query = formatQuery(query_params)
body_params = {
"req_key": "lens_nnsr2_pic_common",
"binary_data_base64": [img2b64("test/6.jpg")],
# "image_urls": [
# "https://lf3-volc-editor.volccdn.com/obj/volcfe/sop-public/upload_867abb997165dca20f8ee835a01303d7.png"
# ],
"model_quality": "MQ", # ["HQ", "MQ", "LQ" ]
"result_format": 0, # 0 png 1 jpeg
}
formatted_body = json.dumps(body_params)
r = signV4Request(access_key, secret_key, service, formatted_query, formatted_body)
rimg = r.json()["data"]["binary_data_base64"]
Image.open(io.BytesIO(base64.b64decode(rimg[0])))
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)