一、ArbSR
paper:Learning A Single Network for Scale-Arbitrary Super-Resolutionhttps://arxiv.org/abs/2004.03791
免费API直接调用网址:longguangwang/arbsr – Run with an API on Replicatehttps://replicate.com/longguangwang/arbsr
使用流程:
二、下载这个API到本地使用
大体步骤
案例测试
import os
import replicate
# 设置环境变量
os.environ["REPLICATE_API_TOKEN"] = "r8_CSAXVLVjPXW39MGfWQ8z4fmI4JvadaG1PwwI3"
input = {
"image": "https://replicate.delivery/mgxm/152376d5-2d94-4d7b-acc3-3a385af6f6a6/skyscraper.png",
"target_width": 600,
"target_height": 200
}
output = replicate.run(
"longguangwang/arbsr:9e20d2768e62c16716c585a899105a63cd5d36f6be17a208dbc201027325d881",
input=input
)
print(output)
#=> [{"file":"https://replicate.delivery/mgxm/081e33eb-f798-4...
输出结果是图片的url:
其实,大体流程并不是很难,满足相应的安装之后,根据代码案例使用即可!但是,从代码案例上可以看出,输入的图片并不是本地的图片格式,而是图片的url网址,如果输入本地的图片就会报错,如下所示:
import os
import replicate
# 设置环境变量
os.environ["REPLICATE_API_TOKEN"] = "r8_CSAXVLVjPXW39MGfWQ8z4fmI4JvadaG1PwwI3"
input = {
"image": "1.jpg", #本地图片路径
"target_width": 2538,
"target_height": 128
}
output = replicate.run(
"longguangwang/arbsr:9e20d2768e62c16716c585a899105a63cd5d36f6be17a208dbc201027325d881",
input=input
)
print(output)
#=> [{"file":"https://replicate.delivery/mgxm/081e33eb-f798-4...
raise ReplicateError.from_response(resp)
replicate.exceptions.ReplicateError: ReplicateError Details:
title: Unauthenticated
status: 401
detail: You did not pass an authentication token
所以不能输入本地的图片,要先把本地的图片上传变成url输入,结果输出也是url,所以再把输出的url变成jpg或png,最后保存到本地。
图片上传url
步骤:我将图片上传到阿里云的云存储OSS,它会返回一个url给我。
先注册一个账号,再进行登录(这不用我细说了吧) ,然后按步骤点击。
再开通对象存储OSS即可,不要钱,再进入管理控制台。
先记住自己的密钥,记住一定要复制到文档中,只能复制一次,后续就查不到了!切记切记!
创建完之后一定要复制到某个地方记住,它只会给你一次机会复制!!!之后返回,创建Bucket!
创建好了,点击进去!复制记住一些重要参数!
需要记住的参数有四个:密钥ID,密钥密码,Bucket名称,地域节点!
完整代码
安装需求:
pip install oss2
pip install replicate #之前有提示要安装,图片里框了
#urllib python3.6之后都自带了,不用安装
import oss2
import replicate
import os
import cv2
import urllib.request
import numpy as np
#URL转numpy
def url_to_array(url):
with urllib.request.urlopen(url) as resp:
image = np.asarray(bytearray(resp.read()), dtype="uint8")
image = cv2.imdecode(image, cv2.IMREAD_COLOR)
return image
# 设置环境变量
os.environ["REPLICATE_API_TOKEN"] = "r8_CSAXVLVjPXW39MGfWQ8z4fmI4JvadaG1PwwI3"
#改成你自己的参数
access_key_id = '***********'
access_key_secret = '**************'
bucket_name = '*************'
endpoint = '********************'
# 创建对象
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
source_image = cv2.imread("1.jpg") #更改自己的图片路径
print(f"输入的图片尺寸:{source_image.shape}")
# 上传
with open("1.jpg", "rb") as f:
data = f.read()
bucket.put_object('1.jpg', data) # '1.jpg'是阿里云OSS存储的图片名称于下方一致
fileurl = bucket.sign_url('GET', '1.jpg', 60 * 60 * 24, headers=None) # 返回值为链接,参数依次为,方法/oss上文件路径/过期时间(s)
print(f"阿里云OSS上传成功,图片路径:{fileurl}")
input = {
"image": fileurl,
"target_width": 2536, #自己更改需要超分的图像尺寸
"target_height": 128
}
output = replicate.run(
"longguangwang/arbsr:9e20d2768e62c16716c585a899105a63cd5d36f6be17a208dbc201027325d881",
input=input
)
print(f"Arbsr超分成功,输出的url:{output}")
image = url_to_array(output)
print(f"输出的图片尺寸:{image.shape}")
cv2.imshow("image", image)
cv2.imshow("source_image", source_image)
cv2.waitKey(0)
cv2.imwrite("result.png", image)
完整代码如上所示,先把本地图片上传阿里云OSS得到url,再利用url进行图像超分,最后将结果url转成图像进行保存!