2022年,当AI开始绘画的时候,很多设计师们觉得没什么。当AI开始生成代码的时候,很多程序员也觉得没什么。当ChatGPT出现的时候,才将AIGC这一领域彻底引爆。被称为AI届的『iPhone时刻』。
ChatGPT对搜索引擎领域冲击巨大,百度仓皇应战,在今年二月高调官宣3月16号召开文心一言发布会。Robin信心满满地说:『十月怀胎,一朝分娩』。甚至扬言『ChatGPT不具备文生图的能力,站在另外一个桌子去比较的话,ChatGPT是落后百度的啊。』
看似百度早有储备,但文心一言(一格)最终衍变成你画我猜,是Robin所想不到的。
话分两头,在文心一言发布会前一天(3月15号),GPT-4横空出世。发布会的后一天(3月17号)微软宣布office全线产品全面接入GPT-4。而在3月16号当天,知名AI绘画产品Midjourney官宣了第5版发布的消息,不存在的中国情侣、特朗普被捕等AI画作以假乱真,震动业界。当然震动的不只是互联网领域、人工智能领域,也包含设计行业,以及模特行业。程序员们在感慨设计行业岌岌可危的时候,殊不知自己也在暗中进入了倒计时。
在OpenAPI发布GPT-4的同一天,同时宣布了旗下编程IDE:Cursor(官网:cursor.so)已经接入GPT-4。
咱也不知道3月16号前后是什么黄道吉日,还是微软、Midjourney你们和百度有仇,这么多AI产品震撼发布。
好了,废话不多说,言归正传。笔者初期也是以玩票的心态体验了这些产品,最终结果则是大为震撼。
ChatGPT我注册了账号,鉴于网上ChatGPT的经验对话已经太多,这里我就不放了。
我体验了一下最新的Midjourney V5。AI绘画与AI对话、生成代码不同,它们需要专业的prompt,我自然不专业,像模像样的看了几个后写了一些。因为我的公众号叫做『编程往事』,所以我写了一个 programming in the past 相关的prompt:
Chinese man, programming in the past, now only recall memories --v 5
--v 表示指定版本。这里用v5。生成结果确实相当震撼,足以乱真,下面有选项,不满意还可以继续调整。
再来一个,我随意写了一些词语:
daemon, chain, blue flame, fight, street, full boy,--v 5 --ar 9:16
--ar 表示指定生成的画面比例。比如上面这个就是9:16,当然它不是能支持任意比例的。对于不支持的比例会报错。这个生成的是2D插画风格的,看起来还不错。其实我只想要蓝色火焰(blue flame),上面大多是蓝黄火焰都有的,第四幅图更是没有蓝色火焰。不过这都没关系,毕竟我不会专业的prompt,我只是随意写的。而且Midjourney也并不完美。
再试一下卡通:
beauty with blond hair fly in the sky, by Toriyama Akira, side view --v 5 --ar 16:9
by指令用于指定图像的风格。Toriyama Akira就是鸟山明。不过生成风格来看其实不像是鸟山明,但确实已经是日本漫画的风格了。它对于欧美画家的风格会识别的更好一点。
看到小红书上有很多人在分享AI绘画,我也想把我生成的图片分享出去。虽然每次生成四张图点击U1 ~ U4四个选项,可以拿到4个加了细节的单图,但是我觉得太慢了。我就想把第一次生成的这4张图分享出去就行,于是我用手机相册编辑切割了半天。
心想着周末写个python脚本吧,一键切割。虽然我之前没写过python处理图像的代码,不过我知道python丰富的第三方库肯定能满足我,我只要google、百度一下,然后整理改改,再调试调试,花个把小时应该就能写出来。
咦,我为什么不让AI帮我做呀。于是我下载了Cursor。相比之前引起轰动的代码生成工具Copilot,Cursor不仅使用简单,而且免费。当然它也支持关联Copilot账号,关联之后生成的代码质量会更高,不过裸板也基本够用了。
我想实现的功能就是将一个图片从中间切割成4等份,并且新图片的名字前缀和原始图片名称一致。另外我发现Midjourney生成的四合一大图有时是webp格式,有时是png格式。我需要把webp格式转成jpg或者png。这是我是诉求,于是我打开Cursor 使用comman + K打开面板,输入:
python, 如果一个图片是webp格式则转成jpg格式。从中间切割成4个图片文件,每个图片名称的前缀和原图片相同。包含main函数,从命令行参数中获取原始图片的路径
既然师出名门OpenAI,这个用起来自然不需要专业的prompt,只需要用自然语言对话就行了,也支持中文。
很快,我得到一段脚本:
import os import sys from PIL import Image def main(): if len(sys.argv)保存执行,然后对上面几个图片分别执行。
确实可用。改都用不改了。预计周末花个把小时做的事情,就这么没了。
除了这些玩具性质的脚本,Cursor也可以用在工作中。作为程序员,如果你没有ChatGPT账号,没关系。Cursor也带有聊天模式。比如我在开发一个组件的过程中,忘记了一个protobuf的用法,平时我就会去一通搜索。现在在Cursor中command + L开启对话模式:
protobuf中MessageOptions和FieldOptions中的序号可以相同吗
完美回答了我的问题。
接着我用command + K让它帮我生成一个demo代码:
C++ protobuf中通过反射获取一个enum类型的数字值和字符串名
// Assume we have a protobuf message called "my_message" const google::protobuf::Descriptor* descriptor = my_message.GetDescriptor(); const google::protobuf::Reflection* reflection = my_message.GetReflection(); // Get the field descriptor for the enum field const google::protobuf::FieldDescriptor* field = descriptor->FindFieldByName("my_enum_field"); // Get the enum value using reflection if (field->type() == google::protobuf::FieldDescriptor::TYPE_ENUM) { const google::protobuf::EnumValueDescriptor* enum_value_descriptor = reflection->GetEnum(my_message, field); int enum_value = enum_value_descriptor->number(); std::string enum_name = enum_value_descriptor->name(); std::cout