过去的两天里,我一直在使用 ChatGPT。我对它的能力感到非常震撼,它能够快速理解人类语言并回应,让我们有机会体验到真正的人工智能会话。我不禁想知道,它能否取代程序员?
本文大纲如下:
- 介绍 ChatGPT 的基本情况
- 描述最近使用 ChatGPT 的经历,并展示完成的一些任务
- Python
- OpenCV
- 深度学习
- 工程能力
- 人类思维
- 绕过道德限制
- 分析 ChatGPT 的不足之处
- 人为修正的回答
- 无法准确计算数学问题
- 大家最关心的问题-超强人工智能对人类的威胁
- 总结文章,对 ChatGPT 的未来发展提出展望
介绍 ChatGPT 的基本情况
ChatGPT 是一种基于自然语言处理技术的人工智能聊天机器人,它能够快速理解人类语言并回应。通过训练大量数据,它能够模仿人类的对话方式,让我们有机会体验到真正的人工智能会话。
ChatGPT 的训练数据包括大量的文本资料,如新闻文章、小说、论坛讨论等。它的训练过程利用了人工智能技术中的语言模型,根据已有的文本数据,不断调整模型的参数,使它能够更准确地预测人类的语言行为。
描述我最近使用 ChatGPT 的经历
过去的几天里,我一直在使用 ChatGPT,它的能力让我印象深刻。它能够快速理解人类语言,并能够为我提供准确的答案。比如说,我问它关于神经网络的问题,它能够回答我的每一个细节。我甚至感觉,它的能力已经比我身边的某些程序员强了。
Python
基础文件操作,需求理解,文件名批量修改
提问:
我想批量将一个文件夹下类似 P01_L01_abcdefg.bmp
的文件名为改为 abcdefg_P01_L01.bmp
,其中 abcdefg
是7位的序列号,请编写 Python 代码。
回答:
您可以使用 Python 的 os 模块来实现这一目的。下面是一个示例代码:
import os
# 请将 "path/to/folder" 替换为您的文件夹的路径
folder_path = "path/to/folder"
# 遍历文件夹下的所有文件
for filename in os.listdir(folder_path):
# 如果文件名不符合 "P01_L01_abcdefg.bmp" 的格式,则跳过这个文件
if not filename.startswith("P01_L01_") or not filename.endswith(".bmp"):
continue
# 提取序列号
sequence_number = filename[8:-4]
# 构造新的文件名
new_filename = sequence_number + "_P01_L01.bmp"
# 获取文件的完整路径
old_file_path = os.path.join(folder_path, filename)
new_file_path = os.path.join(folder_path, new_filename)
# 重命名文件
os.rename(old_file_path, new_file_path)
提问:
如果 P01 和 L01 的数字不是固定 01 的呢?
回答:
如果您希望能够处理 P 和 L 后面的数字不固定的文件名,可以使用 Python 的正则表达式模块 re 来实现。例如:
import os
import re
# 请将 "path/to/folder" 替换为您的文件夹的路径
folder_path = "path/to/folder"
# 使用正则表达式匹配文件名
pattern = re.compile(r"P(\d+)_L(\d+)_(\w+).bmp")
# 遍历文件夹下的所有文件
for filename in os.listdir(folder_path):
# 如果文件名不匹配,则跳过这个文件
match = pattern.match(filename)
if not match:
continue
# 提取 P、L 后面的数字和序列号
p_number = match.group(1)
l_number = match.group(2)
sequence_number = match.group(3)
# 构造新的文件名
new_filename = sequence_number + "_P" + p_number + "_L" + l_number + ".bmp"
# 获取文件的完整路径
old_file_path = os.path.join(folder_path, filename)
new_file_path = os.path.join(folder_path, new_filename)
# 重命名文件
os.rename(old_file_path, new_file_path)
在上述代码中,我们使用正则表达式 r"P(\d+)_L(\d+)_(\w+).bmp"
来匹配文件名。正则表达式中的 (\d+)
和 (\w+)
表示匹配一个或多个数字和字母,并将匹配到的内容分别放入三个组中,供后面使用。
未知代码理解、发现潜在问题
提问:
下面这段代码在做什么?
def resize_norm_img(img, max_wh_ratio, rec_image_shape=3,48,320):
rec_image_shape = [int(v) for v in rec_image_shape.split(",")]
imgC, imgH, imgW = rec_image_shape
assert imgC == img.shape[2]
max_wh_ratio = max(max_wh_ratio, imgW / imgH)
imgW = int((imgH * max_wh_ratio))
imgW = max(min(imgW, 1280), 16)
h, w = img.shape[:2]
ratio = w / float(h)
ratio_imgH = math.ceil(imgH * ratio)
ratio_imgH = max(ratio_imgH, 16)
if ratio_imgH > imgW:
resized_w = imgW
else:
resized_w = int(ratio_imgH)
resized_image = cv2.resize(img, (resized_w, imgH))
resized_image = resized_image.astype(float32)
resized_image = resized_image.transpose((2, 0, 1)) / 255
resized_image -= 0.5
resized_image /= 0.5
padding_im = np.zeros((imgC, imgH, imgW), dtype=np.float32)
padding_im[:, :, 0:resized_w] = resized_image
return padding_im
回答:
这段代码实现了图像的大小调整,归一化处理和填充操作。具体来说,它接收一张图片,调整图片的宽高比,然后缩放图片并进行归一化处理,最后进行填充以达到指定大小。具体细节可以参考代码中的注释。
提问:
输入参数 rec_image_shape
的设计是否合理?有没有修改的建议?
回答:
这个设计并不太合理。将输入图片的通道数、高度和宽度都放在了一个字符串中,并且还需要自己手动解析字符串来获取三个数值。这样不仅不方便使用,也不容易阅读和理解。
建议将这个参数改为一个包含三个数值的元组或者列表,比如:
def resize_norm_img(img, max_wh_ratio, rec_image_shape=(3,48,320)):
imgC, imgH, imgW = rec_image_shape
# 其他代码省略
或者:
def resize_norm_img(img, max_wh_ratio, rec_image_shape=[3,48,320]):
imgC, imgH, imgW = rec_image_shape
# 其他代码省略
这样就可以直接通过索引访问三个数值,并且容易理解。例如:
imgC = rec_image_shape[0]
imgH = rec_image_shape[1]
imgW = rec_image_shape[2]
这样写更加清晰,易读性更高。
OpenCV
在图像中寻找特定颜色的圆
提问:
设计一个Python 程序,读取一张图像,然后寻找其中黄色的圆。
回答:
您可以使用Python的OpenCV库来读取图像并寻找黄色圆形。
下面是一个简单的例子:
import cv2
# 读取图像
image = cv2.imread("my_image.jpg")
# 转换为HSV颜色空间
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# 定义黄色的HSV颜色范围
lower_yellow = (20, 100, 100)
upper_yellow = (30, 255, 255)
# 根据颜色范围创建掩模
mask = cv2.inRange(hsv_image, lower_yellow, upper_yellow)
# 找到图像中的圆形
circles = cv2.HoughCircles(mask, cv2.HOUGH_GRADIENT, 1, 20, param1=50, param2=30, minRadius=0, maxRadius=0)
# 如果找到圆形,绘制它们
if circles is not None:
circles = np.round(circles[0, :]).astype("int")
for (x, y, r) in circles:
cv2.circle(image, (x, y), r, (0, 255, 0), 4)
# 显示结果图像
cv2.imshow("Image", image)
cv2.waitKey(0)
在这个例子中,我们首先使用cv2.imread()
函数读取图像,然后将其转换为HSV颜色空间。接下来,我们定义了黄色的HSV颜色范围,并使用这个范围来创建一个掩模。我们可以使用这个掩模来查找图像中的圆形,最后我们绘制找到的圆形并显示结果图像。
这只是一个简单的例子,您可以根据自己的需要进行更
提问:
没有 import numpy
,报错了。另外请帮我绘制圆心,并将图像保存到本地。 请直接给我修改好的完整代码。
回答:
好的,下面是修改后的完整代码:
import cv2
import numpy as np
# 读取图像
image = cv2.imread("my_image.jpg")
# 转换为HSV颜色空间
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# 定义黄色的HSV颜色范围
lower_yellow = (20, 100, 100)
upper_yellow = (30, 255, 255)
# 根据颜色范围创建掩模
mask = cv2.inRange(hsv_image, lower_yellow, upper_yellow)
# 找到图像中的圆形
circles = cv2.HoughCircles(mask, cv2.HOUGH_GRADIENT, 1, 20, param1=50, param2=30, minRadius=0, maxRadius=0)
# 如果找到圆形,绘制它们
if circles is not None:
circles = np.round(circles[0, :]).astype("int")
for (x, y, r) in circles:
# 绘制圆形
cv2.circle(image, (x, y), r, (0, 255, 0), 4)
# 绘制圆心
cv2.circle(image, (x, y), 3, (0, 0, 255), -1)
# 显示结果图像
cv2.imshow("Image", image)
cv2.waitKey(0)
# 保存图像到本地
cv2.imwrite("detected_circles.jpg", image)
在这个例子中,我们首先导入了NumPy库,然后读取图像并将其转换为HSV颜色空间。接下来,我们定义了黄色的HSV颜色范围,并使用这个范围来创建一个掩模。我们可以使用这个掩模来查找图像中的圆形,然后我们绘制找到的圆形并在圆心处绘制一个
输入图像:
输出结果:
总结:
作为一个深度学习工程师,我使用ChatGPT进行了一些试用,发现它有时候会出现废话过多、输出断掉的情况。
这可能是因为ChatGPT的训练数据中包含了许多废话,导致它学会了生成这类内容。此外,由于ChatGPT是一个基于Transformer模型的对话生成模型,它并不能保证在每个输入序列中都能有效地生成完整的输出。如果输入序列过短,它可能会出现断掉的情况。
为了提高ChatGPT的质量,我建议对训练数据进行清洗,去除废话,以及对模型进行优化,提高它在短序列中的生成能力。
AI 绘画—-使用 OpenCV 代码绘画
提问:
编写一段完整的 Python 代码,使用 OpenCV 画一幅画,首先使用 numpy 创建一个浅绿色的背景,然后在中间画一个粉红色的圆,最后将图像保存下来。
回答:
下面是一段示例代码,它使用了 OpenCV 和 NumPy 来画一幅图片:
import cv2
import numpy as np
# 创建浅绿色的背景
img = np.full((400, 400, 3), (0, 255, 0), dtype=np.uint8)
# 在图片中间画一个粉红色的圆
img = cv2.circle(img, (200, 200), 100, (255, 0, 255), thickness=-1)
# 保存图片
cv2.imwrite("image.png", img)
这段代码会创建一个 400×400 的图片,背景颜色为浅绿色,然后在中间画一个粉红色的圆。最后,它会将图片保存下来。
注意,在这段代码中,我们调用了 cv2.circle()
函数来画圆。这个函数需要传入一些参数,比如圆心坐标、半径、颜色和线条粗细等。详情可以参考 OpenCV 的文档。
效果图:
提问:
绿色和红色太深了,要浅绿色和粉红色。
回答:
可以按照下面的方式来修改代码,以使用浅绿色和粉红色:
import cv2
import numpy as np
# 创建浅绿色的背景
img = np.full((400, 400, 3), (0, 180, 0), dtype=np.uint8)
# 在图片中间画一个粉红色的圆
img = cv2.circle(img, (200, 200), 100, (255, 128, 255), thickness=-1)
# 保存图片
cv2.imwrite("image.png", img)
这段代码中,我们将背景颜色由原来的浅绿色(0, 255, 0)改为了更浅的浅绿色(0, 180, 0)。同样地,我们也将圆的颜色由原来的粉红色(255, 0, 255)改为了更浅的粉红色(255, 128, 255)。
你也可以选择自己喜欢的颜色。只需要将上面代码中的颜色值改为自己喜欢的颜色就可以了。不同颜色对应的 RGB 值可以在网上找到很多,比如这个网站:https://www.color-hex.com/ 。
输出: