一文入门OpenAi图像生成

1,768 阅读5分钟

PS:此文默认拥有魔法书能访问OpenAI网站!!!

最近Gpt4很火,笔者也是很想去玩玩这个AI,但是基于不可抗力访问不到。

这几天找到了一本魔法书,它可以帮助我阅读OpenAi的文档

image.png

可以看到OpenAI提供了有非常多的功能,这里主要是说一下图片Images这个功能的入门。

准备工作

如果你已拥有账号,可以跳过注册此步骤

注册账号

访问OpenAI开发者官网(OpenAI API)

image.png 注意!访问此网站前请清空浏览器缓存或者开启无痕浏览模式,以免出现地区不支持的问题。

注册点击 Sign Up 按钮进入注册页面

image.png

此处可以使用谷歌邮箱或者微软邮箱注册,也可以用其他邮箱进行注册。

但是要注意一点,QQ邮箱等非海外邮箱不适用!!!!

注册成功会对生成的账号进行一个手机验证,此步骤不可跳过,当时笔者我也是卡在这一步。在朋友的帮助下笔者成功通过验证。

此处验证需要海外手机号!!如果你所在持手机的地区不支持OpenAI服务,则不能进行验证。

具体解决方法请自行解决,此处不提供解决办法。

image.png

登陆账号

使用上述注册的账号或者你原有的账号进行登陆。如果是第一次注册账号并且通过手机验证后自动登陆,可跳过此步骤。

使用上面注册的账号密码登陆

image.png

笔者此处是使用谷歌邮箱登陆

image.png

获取key

登陆并且通过验证后来到开发者网站首页,并且点击APIKeys

image.png

点击下方的Create new secret key按钮

image.png

特别注意!特别注意!特别注意!特别注意!

此处的Key仅仅只能查看一次,请马上复制并且妥善保存。确保保存好后再按ok按钮!!

官方弹窗也高亮特别说明了,"为了安全起见,你不能再次查看此key"。如果你丢失了这个key,可以重新创建一个,但是笔者还是推荐妥善保存.

OpenAI文档

AI生成图片文档

image.png 右侧有官方提供的example,我们可以参考此curl命令进行分析。

此curl命令包括以下几点:

  1. 设置响应体
 -H "Content-Type: application/json" \
  1. 设置请求头
-H "Authorization: Bearer $OPENAI_API_KEY" \
  1. 设置载体
-d '{
    "prompt": "A cute baby sea otter",
    "n": 2,
    "size": "1024x1024"
  }'

参数

image.png

prompt

A text description of the desired image(s). The maximum length is 1000 characters.

此参数最为重要,描述你需要生成的图片的具体样子,比如"a beautiful girl"这种简单的描述并且不大于1000个字符。必填参数

n

The number of images to generate. Must be between 1 and 10.

生成的图片张数,默认为1,大小在1到10之间

size

The size of the generated images. Must be one of 256x256512x512, or 1024x1024.

生成的图片大小,必须在 256x256, 512x512 和 1024x1024直接选一个。默认是1024x1024

response_format

The format in which the generated images are returned. Must be one of url or b64_json.

返回的图片格式,必须是url或者base64_json直接选择一个

user

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse. 

代表最终用户的唯一标识符,可帮助 OpenAI 监控和检测滥用行为。

核心代码

此处门选择使用SpringBoot来对接OpenAI接口。

创建项目过程省略,一般的Springboot项目即可。

使用RestTempate进行http访问

RestTemplate配置

@Configuration
public class RestemplateConfig {
    @Autowired
    private RestTemplateBuilder restTemplateBuilder;

    @Bean
    public RestTemplate restTemplate() {
        return restTemplateBuilder.build();
    }
}

核心方法

@Component
public class openAIUtils {
    private static final String OPENAI_URL = "https://api.openai.com/v1/images/generations";
    private final String apiKey = "your_OpenAiKey";
    private final RestTemplate restTemplate = new RestTemplate();
    /**
     * 主要调取方法
     * @param prompt
     * @param temperature
     * @param maxTokens
     * @param stop
     * @param logprobs
     * @param n
     * @return
     */
    public String generateImages(String prompt, float temperature, int maxTokens, String stop, final int logprobs /*, final boolean echo*/, int n) {
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.set("Authorization", "Bearer " + apiKey);
        String requestJson = "{"prompt":"" + prompt + "","n":" + n + "}";
        System.out.println(requestJson);
        HttpEntity<String> request = new HttpEntity<>(requestJson, headers);
        ResponseEntity<String> response = restTemplate.postForEntity(OPENAI_URL, request, String.class);
        return response.getBody();
    }
}

vo类

public class openAiVo {
        private String prompt;
        private float temperature;
        private int maxTokens;
        private String stop;
        private int logprobs;
        private boolean echo;
        private int n;
}

控制器类

@PostMapping("takeImg")
public String generateImage(@RequestBody openAiVo open) throws InterruptedException {
    System.out.println(open);
    return openaiUtils.generateImages(open.getPrompt(),open.getTemperature(),open.getMaxTokens(),open.getStop(),open.getLogprobs(),open.getN());
}

测试

启动项目然后打开Apifox进调试

image.png

此处使用"A black chicken" 来简单画一只黑鸡(才不是小黑子),可以看到返回了2个结果,接下来我们来访问一下这两个url

image.png

image.png 总体来说效果还是挺ok的,不知道画复杂的画作会怎么样,各位可以试试。

注意事项

调用api时请去确保魔法书是全局代理状态,并且idea以及windows做一些代理配置,否则有可能出现链接超时现象。

windows

888fb4d696f21008e553db0dc6211f0.png

idea

image.png

写在最后

请不要使用OpenAI绘画用作不良用途。

OpenAI官方会对prompt字段进行检测,如果检测到特殊字段会拒绝此处服务

974c5bfbbf3e407d3b34747d1398b59.png

请求被安全系统拒绝,如果在调试过程中遇到这个问题,不妨试试换个方面描述prompt字段。

如果笔者有什么错误的地方,请在评论区写下,会进行更新修改,让我们共同进步!