10行Python代码能做出哪些有趣的事情?

简介: Python 凭借语法的易学性,代码的简洁性以及类库的丰富性,赢得了众多开发者的喜爱。下面我们来看看,用不超过10行代码能实现些什么有趣的功能

百度飞桨



百度飞桨 paddlepaddle 是百度开源的深度学习工具,其功能强大,基于该工具我们可以实现很既有趣又有用的功能

在使用之前,我们肯定要先安装喽

pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
pip install paddlehub -i https://mirror.baidu.com/pypi/simple

安装完成后,我们来体验几个有趣的项目


批量抠图

批量获取指定目录下的图片,然后通过 paddlehub 训练好的模型进行批量抠图处理

import os
import paddlehub as hub
# 加载模型
humanseg = hub.Module(name='deeplabv3p_xception65_humanseg')  
path = './heben/'    # 文件目录
# 获取文件列表
files = [path + i for i in os.listdir(path)]  
# 抠图
results = humanseg.segmentation(data={'image': files})  
for result in results:
    print(result)

Output:微信图片_20220522230809.png

我们可以看到,经过处理之后的图片自动保存在目录 humanseg_output 下面

我们可以对比下处理前后图片的差异

微信图片_20220522230814.png微信图片_20220522230817.png

整体来看,抠图效果还是非常棒的!

注意:如果执行代码没有生成对应的 out 文件夹,可以重新手动安装模型再尝试

hub install deeplabv3p_xception65_humanseg==1.0.0


自然语言处理

飞桨同样有很强的自然语言处理能力,在处理文字情绪识别方面也非常突出

senta = hub.Module(name='senta_lstm')        # 加载模型
sentence = [    # 准备要识别的语句
    '你好漂亮', '你真难看呀', '他好难过', '我不开心', '这是一款什么游戏,真垃圾', '这个游戏太好玩了',
]
results = senta.sentiment_classify(data={'text':sentence})    # 情绪识别
# 输出识别结果
for result in results:
    print(result)

Output:微信图片_20220522230820.png

可以看出,文字情绪的识别还是非常准确的,当然我们这里语料比较少,在大语料、更复杂的语言环境下,飞浆的表现如何还有待验证


人脸识别

当今社会人脸识别可以说是随处可见,而在疫情肆虐的今天,口罩似乎也成为我们日常出现必备的条件,飞浆工具也增加了口罩识别功能,我们来看看

# 加载模型
module = hub.Module(name='pyramidbox_lite_mobile_mask')
# 图片列表
image_list = ['face2.jpg']
# 获取图片字典
input_dict = {'image':image_list}
# 检测是否带了口罩
module.face_detection(data=input_dict)

face.jpg 如下微信图片_20220522230824.jpg

Output:

[{'data': [{'label': 'NO MASK',
    'confidence': 0.9995137453079224,
    'top': 478,
    'bottom': 775,
    'left': 1894,
    'right': 2126},
   {'label': 'NO MASK',
    'confidence': 0.9903278946876526,
    'top': 512,
    'bottom': 810,
    'left': 1754,
    'right': 1998},
   {'label': 'NO MASK',
    'confidence': 0.9997405409812927,
    'top': 697,
    'bottom': 985,
    'left': 1857,
    'right': 2131},
   {'label': 'NO MASK',
    'confidence': 0.943692147731781,
    'top': 575,
    'bottom': 888,
    'left': 1954,
    'right': 2216}],
  'path': 'face2.jpg'}]

可以看出,已经判断出超过99%的概率,该张图片是没有佩戴口罩的


人脸关键点检测

人脸关键点检测是人脸识别和分析领域中的关键一步,它是诸如自动人脸识别、表情分析、三维人脸重建及三维动画等其它人脸相关问题的前提和突破口

我们以如下这张图片作为待检测图片微信图片_20220522231029.jpg

代码如下

face_landmark = hub.Module(name="face_landmark_localization")
image = 'face.jpg'
result = face_landmark.keypoint_detection(images=[cv2.imread(image)],visualization=True)
print(result)

Output:微信图片_20220522231033.png

可以看到人脸关键点已经标注出来,并且把检测后的图片自动存储在 face_landmark_output 目录下微信图片_20220522231036.jpg


OpenCV


OpenCV 作为最为著名的计算机视觉工具,基于它我们也可以做很多有趣的事情 首先我们安装好 OpenCV 库

pip install opencv-python


猫脸识别

在当今社会,谁还没有一个两个猫主子呢,高冷的猫咪往往会得到人们特殊的爱戴!

我们也习惯了人脸识别,今天就通过几行代码来看看猫脸识别是怎么的呢

首先我们到安装目录下提取锚链识别 XML 分类器,具体目录如下

C:\Python3\Lib\site-packages\cv2\data

可以看到有如下很多分类器微信图片_20220522231043.png

我们复制 haarcascade_frontalcatface.xml 到自己的项目下即可

# 待检测的图片路径
ImagePath = './cat/cat.jpg'
# 读取图片
image = cv2.imread(ImagePath)
# 把图片转换为灰度模式
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 探测图片中的猫脸
# 获取训练好的猫脸的参数数据,进行猫脸检测
face_cascade = cv2.CascadeClassifier(r'./haarcascade_frontalcatface.xml')
faces = face_cascade.detectMultiScale(gray,scaleFactor=1.15,minNeighbors=5,minSize=(3, 3))
search_info = "Find %d face."%len(faces) if len(faces) <= 1 else "Find %d faces."%len(faces)
# 绘制猫脸的矩形区域(红色边框)
for (x, y, w, h) in faces:
    cv2.rectangle(image, (x,y), (x+w,y+h), (0,0,255), 2)
# 显示图片
# cv2.imshow('Find faces!', image)
# cv2.waitKey(0)
cv2.imwrite("./cat/cat2.jpg", image)

Output:微信图片_20220522231048.jpg


获取摄像头人脸

我们编写一个获取实时动态视频流的代码,实时获取当中的人脸信息

detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)
while True:
    ret, img = cap.read()
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = detector.detectMultiScale(gray, 1.3, 5)
    for (x, y, w, h) in faces:
        cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
    cv2.imshow('frame', img)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

注意这里使用的分类器是 haarcascade_frontalface_default.xml,可不要用错哦

Output:

自行在自己的电脑上尝试下哦~


快速生成动图


在很多时候,尤其是在线聊天时,输了什么也不能输掉斗图啊,下面的代码可以快速生成动图,在和朋友的斗图当中,得胜的把握又增加了

import imageio
image_list = ['image/1.jpg','image/2.jpg', 'image/3.jpg', 'image/4.jpg']
gif_name = "dongtu.gif"
duration = 1
frames = []
for image_name in image_list:
    frames.append(imageio.imread(image_name))
imageio.mimsave(gif_name, frames, "GIF", duration=duration)

Output:

微信图片_20220522231215.gif

动图二维码


二维码在我们的生活当中实在是太重要了,收付款、快速进入网站,访问各种统计信息等等,下面就来快速生成一个有趣的动图二维码

我们使用的图片如下

微信图片_20220522231223.gif

代码如下

from MyQR import myqr
url = "https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzU5NDcyOTg4MA==#wechat_redirect"
myqr.run(words=url,version=3,
         picture="4.gif",colorized=True,save_name="luobodazahui.gif",
         save_dir="./")


ftp 服务器


可能很多人不知道,通过 Python 几行简单代码,我们可以快速实现一个简易的 ftp 服务器,这样在局域网内进行文件传输不再发愁啦!

代码非常简单,直接运行 Python 自带的 http 服务器即可

python -m http.server 8090

Output:微信图片_20220522231345.png

接下来我们访问本地 IP + 端口8090

微信图片_20220522231348.png

很强大,很简单,很好用!


字符画


字符画是一系列字符的组合,我们可以把字符看作是比较大块的像素,一个字符能表现一种颜色,字符的种类越多,可以表现的颜色也越多,图片也会更有层次感

我们只需要短短几行代码,就可以完成字符画的制作

我们使用的图片如下

微信图片_20220522231352.jpg

代码如下

IMG = "3.jpg"
WIDTH = 80
HEIGHT = 40
OUTPUT = "./ascii/ascii.txt"
ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
# 将256灰度映射到70个字符上
def get_char(r,g,b,alpha = 256):
    if alpha == 0:
        return ' '
    length = len(ascii_char)
    gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
    unit = (256.0 + 1)/length
    return ascii_char[int(gray/unit)]
im = Image.open(IMG)
im = im.resize((WIDTH,HEIGHT), Image.NEAREST)
txt = ""
for i in range(HEIGHT):
    for j in range(WIDTH):
        txt += get_char(*im.getpixel((j,i)))
    txt += '\n'
print(txt)
#字符画输出到文件
with open(OUTPUT,'w') as f:
    f.write(txt)

Output:

微信图片_20220522231446.png

相关文章
|
9天前
|
测试技术 Python
探索Python中的装饰器:简化代码,增强功能
在Python的世界中,装饰器是那些能够为我们的代码增添魔力的小精灵。它们不仅让代码看起来更加优雅,还能在不改变原有函数定义的情况下,增加额外的功能。本文将通过生动的例子和易于理解的语言,带你领略装饰器的奥秘,从基础概念到实际应用,一起开启Python装饰器的奇妙旅程。
28 11
|
24天前
|
缓存 监控 测试技术
Python中的装饰器:功能扩展与代码复用的利器###
本文深入探讨了Python中装饰器的概念、实现机制及其在实际开发中的应用价值。通过生动的实例和详尽的解释,文章展示了装饰器如何增强函数功能、提升代码可读性和维护性,并鼓励读者在项目中灵活运用这一强大的语言特性。 ###
|
27天前
|
缓存 开发者 Python
探索Python中的装饰器:简化代码,增强功能
【10月更文挑战第35天】装饰器在Python中是一种强大的工具,它允许开发者在不修改原有函数代码的情况下增加额外的功能。本文旨在通过简明的语言和实际的编码示例,带领读者理解装饰器的概念、用法及其在实际编程场景中的应用,从而提升代码的可读性和复用性。
|
28天前
|
设计模式 缓存 监控
Python中的装饰器:代码的魔法增强剂
在Python编程中,装饰器是一种强大而灵活的工具,它允许程序员在不修改函数或方法源代码的情况下增加额外的功能。本文将探讨装饰器的定义、工作原理以及如何通过自定义和标准库中的装饰器来优化代码结构和提高开发效率。通过实例演示,我们将深入了解装饰器的应用,包括日志记录、性能测量、事务处理等常见场景。此外,我们还将讨论装饰器的高级用法,如带参数的装饰器和类装饰器,为读者提供全面的装饰器使用指南。
|
23天前
|
Python
探索Python中的装饰器:简化代码,提升效率
【10月更文挑战第39天】在编程的世界中,我们总是在寻找使代码更简洁、更高效的方法。Python的装饰器提供了一种强大的工具,能够让我们做到这一点。本文将深入探讨装饰器的基本概念,展示如何通过它们来增强函数的功能,同时保持代码的整洁性。我们将从基础开始,逐步深入到装饰器的高级用法,让你了解如何利用这一特性来优化你的Python代码。准备好让你的代码变得更加优雅和强大了吗?让我们开始吧!
23 1
|
24天前
|
存储 缓存 监控
掌握Python装饰器:提升代码复用性与可读性的利器
在本文中,我们将深入探讨Python装饰器的概念、工作原理以及如何有效地应用它们来增强代码的可读性和复用性。不同于传统的函数调用,装饰器提供了一种优雅的方式来修改或扩展函数的行为,而无需直接修改原始函数代码。通过实际示例和应用场景分析,本文旨在帮助读者理解装饰器的实用性,并鼓励在日常编程实践中灵活运用这一强大特性。
|
26天前
|
机器学习/深度学习 数据采集 人工智能
探索机器学习:从理论到Python代码实践
【10月更文挑战第36天】本文将深入浅出地介绍机器学习的基本概念、主要算法及其在Python中的实现。我们将通过实际案例,展示如何使用scikit-learn库进行数据预处理、模型选择和参数调优。无论你是初学者还是有一定基础的开发者,都能从中获得启发和实践指导。
41 2
|
17天前
|
存储 数据挖掘 开发者
Python编程入门:从零到英雄
在这篇文章中,我们将一起踏上Python编程的奇幻之旅。无论你是编程新手,还是希望拓展技能的开发者,本教程都将为你提供一条清晰的道路,引导你从基础语法走向实际应用。通过精心设计的代码示例和练习,你将学会如何用Python解决实际问题,并准备好迎接更复杂的编程挑战。让我们一起探索这个强大的语言,开启你的编程生涯吧!
|
23天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
23天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!