2024-08-08



import cv2
import numpy as np
import pytesseract
from PIL import Image
 
def preprocess_image(image_path):
    # 读取图片并转为灰度图
    image = cv2.imread(image_path)
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
 
    # 使用自适应阈值进行二值化
    thresh = cv2.adaptiveThreshold(
        gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)
 
    return thresh
 
def extract_license_plate(image_path):
    # 预处理图片
    thresh = preprocess_image(image_path)
 
    # 寻找轮廓
    contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
 
    # 根据轮廓大小进行排序,找到最大的轮廓
    contours = sorted(contours, key=cv2.contourArea, reverse=True)[:5]
 
    # 遍历轮廓并提取车牌区域
    for contour in contours:
        # 计算轮廓的边界框
        x, y, w, h = cv2.boundingRect(contour)
 
        # 通过比例筛选可能的车牌区域
        if (float(h) / w > 2.5 and w > h):
            # 裁剪车牌区域
            license_plate = thresh[y:y + h, x:x + w]
 
            # 保存车牌图片
            cv2.imwrite('license_plate.jpg', license_plate)
 
            # 返回处理好的车牌图片路径
            return 'license_plate.jpg'
 
    return None
 
def recognize_license_plate(license_plate_image_path):
    # 加载中文字典
    pytesseract.set_dictionary_path('chi_sim.traineddata')
 
    # 指定使用中文识别
    pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
    pytesseract.image_to_string(Image.open(license_plate_image_path), lang='chi_sim')
 
 
# 示例使用
image_path = 'car_image.jpg'
license_plate_image_path = extract_license_plate(image_path)
if license_plate_image_path:
    print(recognize_license_plate(license_plate_image_path))
else:
    print("未找到车牌区域")

这个代码示例展示了如何实现一个简单的车牌识别系统。它包括了图像预处理、轮廓查找、车牌区域定位,以及使用Tesseract OCR进行车牌字符识别的主要步骤。这个流程是车牌识别系统的基本框架,对于学习图像处理和文字识别技术有很好的指导价值。

2024-08-08

在Python中,我们可以使用jieba库进行中文分词,并使用wordcloud库生成词云。以下是一个简单的例子,展示如何使用这两个库来生成一个词云图。

首先,确保安装了所需的库:




pip install jieba wordcloud

然后,使用以下代码生成词云:




import jieba
from wordcloud import WordCloud
import numpy as np
import PIL.Image as Image
 
# 分词
text = "你好 世界 你好世界 你好世界 你好世界 你好世界 你好世界 你好世界"
cut_text = " ".join(jieba.cut(text))
 
# 创建词云
mask_image = np.array(Image.open("mask.png"))  # 加载背景图片
wordcloud = WordCloud(background_color="white", mask=mask_image, font_path='simhei.ttf')
wordcloud.generate(cut_text)
 
# 保存词云图片
wordcloud.to_file("wordcloud.png")

在这个例子中,我们使用了一个简单的文本,并用jieba进行了分词。然后,我们使用一个图片作为词云的形状,并指定了一个字体文件(如simhei.ttf),以生成带有宋体字的词云。最后,我们将生成的词云保存为一个PNG图片。

注意:需要一个合适的背景图片作为词云的“遮罩”,这里命名为mask.png。同时,需要指定一个支持中文的字体文件,这里使用的是宋体(simhei.ttf),你需要确保这个文件在你的文件系统中是可用的。如果你的环境中没有这个字体文件,可以从网上下载或者使用系统中已有的中文字体文件。

2024-08-08



# 集合运算:并集、交集、差集、对称差
set_a = {1, 2, 3, 4}
set_b = {3, 4, 5, 6}
 
# 并集
union = set_a | set_b
print("并集:", union)
 
# 交集
intersection = set_a & set_b
print("交集:", intersection)
 
# 差集
difference_a = set_a - set_b
difference_b = set_b - set_a
print("集合A与集合B的差集:", difference_a)
print("集合B与集合A的差集:", difference_b)
 
# 对称差集
symmetric_difference = (set_a - set_b) | (set_b - set_a)
print("对称差集:", symmetric_difference)
 
# 集合查找:判断元素是否在集合中
element = 3
if element in set_a:
    print(f"元素 {element} 在集合set_a中。")
else:
    print(f"元素 {element} 不在集合set_a中。")
 
# 集合去重:利用集合自动去除重复元素的特性
list_with_duplicates = [1, 2, 2, 3, 4, 4, 5]
unique_set = set(list_with_duplicates)
print("去重后的集合:", unique_set)

这段代码展示了如何使用Python中的set()函数进行集合操作,包括并集、交集、差集和对称差集的计算,以及如何查找元素是否在集合中,并利用集合去除列表中的重复元素。

2024-08-08



import sqlite3
 
# 连接到SQLite数据库(如果数据库不存在,会自动在当前目录创建)
# 如果数据库存在,则连接到现有数据库
conn = sqlite3.connect('example.db')
 
# 创建一个Cursor对象,用于执行SQL命令
cur = conn.cursor()
 
# 执行SQL命令创建一个表
cur.execute('''CREATE TABLE IF NOT EXISTS stocks
               (date text, trans text, symbol text, qty real, price real)''')
 
# 关闭Cursor对象
cur.close()
 
# 提交事务
conn.commit()
 
# 关闭连接
conn.close()

这段代码演示了如何使用Python的sqlite3库来连接到一个SQLite数据库,创建一个新表,并在操作完成后关闭相关资源。这是数据库操作中一个基本且重要的过程。

2024-08-08

要将Python中的数据存储到MySQL中,你可以使用mysql-connector-python库。以下是一个简单的例子,演示如何连接到MySQL数据库并插入一条记录:

  1. 首先,确保你已经安装了mysql-connector-python库。如果没有安装,可以使用pip安装:



pip install mysql-connector-python
  1. 然后,使用以下Python代码将数据存储到MySQL中:



import mysql.connector
from mysql.connector import Error
 
def connect_to_database(host, database, user, password):
    try:
        conn = mysql.connector.connect(host=host,
                                       database=database,
                                       user=user,
                                       password=password)
        if conn.is_connected():
            print("连接成功!")
            return conn
    except Error as e:
        print("连接失败:", e)
 
def insert_data(conn, data):
    try:
        cursor = conn.cursor()
        sql_query = """INSERT INTO users (name, age) VALUES (%s, %s)"""
        cursor.execute(sql_query, data)
        conn.commit()
        print("数据插入成功!")
    except Error as e:
        print("数据插入失败:", e)
    finally:
        cursor.close()
 
# 数据库连接配置
host = 'localhost'
database = 'testdb'
user = 'root'
password = 'password'
 
# 要插入的数据
data = ('John Doe', 22)
 
# 连接数据库
connection = connect_to_database(host, database, user, password)
 
# 插入数据
insert_data(connection, data)
 
# 关闭连接
connection.close()

在这个例子中,我们首先定义了一个函数connect_to_database来连接到MySQL数据库,然后定义了一个insert_data函数来执行插入操作。请确保你的数据库、用户和密码配置与你的数据库信息相匹配,并且在运行代码之前创建相应的数据库和表(在这个例子中是users表,需要有nameage两个字段)。

2024-08-08

这个问题看起来是在寻求一个基于不同技术栈的智能停车场管理系统的代码实例。由于提供整个系统的代码不太现实,我将提供一个简单的用户界面和后端API的示例。

前端(Vue.js):




<!-- 停车场状态显示组件 -->
<template>
  <div>
    <h1>停车场状态</h1>
    <p>剩余车位: {{ availableSpaces }}</p>
    <button @click="checkInCar">进入车辆</button>
    <button @click="checkOutCar">离开车辆</button>
  </div>
</template>
 
<script>
export default {
  data() {
    return {
      availableSpaces: 0,
    };
  },
  methods: {
    checkInCar() {
      // 调用后端API来处理进入车辆的逻辑
      this.updateAvailableSpaces();
    },
    checkOutCar() {
      // 调用后端API来处理离开车辆的逻辑
      this.updateAvailableSpaces();
    },
    updateAvailableSpaces() {
      // 假设有一个API endpoint /api/parking-lot/spaces
      this.axios.get('/api/parking-lot/spaces').then(response => {
        this.availableSpaces = response.data.availableSpaces;
      });
    }
  },
  created() {
    this.updateAvailableSpaces();
  }
};
</script>

后端API (Flask):




from flask import Flask, jsonify
 
app = Flask(__name__)
 
# 假设有一个全局停车场空位数字典
parking_lot = {
    'availableSpaces': 10
}
 
@app.route('/api/parking-lot/spaces')
def get_parking_lot_status():
    return jsonify({'availableSpaces': parking_lot['availableSpaces']})
 
@app.route('/api/parking-lot/check-in', methods=['POST'])
def check_in_car():
    # 模拟进入车辆的逻辑
    global parking_lot
    parking_lot['availableSpaces'] -= 1
    return jsonify({'status': 'success', 'message': '车辆已进入停车场'})
 
@app.route('/api/parking-lot/check-out', methods=['POST'])
def check_out_car():
    # 模拟离开车辆的逻辑
    global parking_lot
    parking_lot['availableSpaces'] += 1
    return jsonify({'status': 'success', 'message': '车辆已离开停车场'})
 
if __name__ == '__main__':
    app.run(debug=True)

这个例子提供了一个简单的停车场管理界面和后端API。在实际应用中,你需要添加更复杂的逻辑,例如检查车辆信息

2024-08-08

以下是一个简单的HTML和CSS示例,用于模拟Windows桌面主题的特效。




<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Windows Desktop Theme Simulation</title>
<style>
  body {
    height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background: #ffffff; /* 白色背景 */
    background-size: cover;
    background-blend-mode: multiply;
    animation: rotation 10s infinite linear;
  }
 
  @keyframes rotation {
    from {
      background-position: 0 0;
    }
    to {
      background-position: 100% 100%;
    }
  }
</style>
</head>
<body>
  <div class="content">
    <h1>欢迎来到模拟桌面</h1>
    <p>这是一个模拟Windows桌面特效的页面。</p>
  </div>
</body>
</html>

这段代码使用CSS的background-blend-mode属性和background-position动画来创建一种背景图片持续移动和混合效果,从而模拟Windows桌面壁纸的动态效果。这个示例简单易懂,适合作为面试复盘练习。

2024-08-08



import requests
from bs4 import BeautifulSoup
import re
 
def crawl_site(url):
    # 发送HTTP请求
    res = requests.get(url)
    # 解析网页
    soup = BeautifulSoup(res.text, 'html.parser')
    # 提取所有的链接
    links = soup.find_all('a')
    for link in links:
        # 提取链接地址
        link_url = link.get('href')
        # 筛选出有效的链接地址
        if re.match(r'^http', link_url) and link_url not in crawled_urls:
            print(link_url)
            crawled_urls.add(link_url)
            crawl_site(link_url)
 
# 启始网址
home_page_url = 'http://example.com'
# 已爬取的链接集合
crawled_urls = set()
# 爬取起始网页
crawled_urls.add(home_page_url)
crawl_site(home_page_url)

这段代码使用了requests库来发送HTTP请求,使用BeautifulSoup来解析HTML,并使用正则表达式(re)来筛选链接。这个简单的示例展示了如何递归地爬取一个网站的所有页面,并提取其中的链接,但在实际应用中可能需要处理更复杂的情况,例如处理登录、处理Cookies、应对反爬虫策略等。

2024-08-08

为了创建一个POC(Proof of Concept)批量化扫洞的爬虫,我们可以使用Python的requests库来请求FOFA的API,并使用concurrent.futures库来实现并发处理。以下是一个简单的示例:




import requests
from concurrent.futures import ThreadPoolExecutor
 
# FOFA API 参数配置
API_URL = "https://fofa.info/api/v1/search/all"
EMAIL = "your_email@example.com"
KEY = "your_api_key"
QUERY = "protocol=\"http\""  # 这里填写你的FOFA查询语言
 
def search_fofa(query):
    params = {
        "email": EMAIL,
        "key": KEY,
        "qbase64": query
    }
    response = requests.get(API_URL, params=params)
    if response.status_code == 200:
        return response.json()
    else:
        print("Error:", response.status_code)
        return None
 
def main():
    # 编码查询并构造线程数
    query = requests.utils.quote(QUERY)
    threads = 10
 
    # 使用ThreadPoolExecutor并发执行搜索
    with ThreadPoolExecutor(max_workers=threads) as executor:
        future_to_search = {executor.submit(search_fofa, query): query for _ in range(threads)}
        for future in concurrent.futures.as_completed(future_to_search):
            query = future_to_search[future]
            try:
                data = future.result()
                if data:
                    # 处理返回的数据
                    print(f"Query: {query}, Results: {len(data['results'])}")
            except Exception as exc:
                print(f"{query} generated an exception: {exc}")
 
if __name__ == "__main__":
    main()

在这个例子中,我们定义了search_fofa函数来发送请求到FOFA API,并定义了main函数来并发执行搜索。我们使用了requests库来编码查询语句,并使用ThreadPoolExecutor来并发执行多个搜索请求。

请注意,你需要替换EMAILKEY变量值为你的FOFA账户信息,并且根据需要调整QUERY来设置你的搜索条件。此外,你可能需要处理返回的数据以及异常情况,并根据FOFA API的限制来调整线程数和查询语句。

2024-08-08

requests模块是Python中一个非常强大的模块,用于发送HTTP请求。

  1. 发送GET请求



import requests
 
response = requests.get('https://www.google.com/')
print(response.text)
  1. 发送POST请求



import requests
 
payload = {'key1': 'value1', 'key2': 'value2'}
response = requests.post("https://httpbin.org/post", data=payload)
print(response.text)
  1. 添加headers



import requests
 
headers = {'User-Agent': 'my-app/0.0.1'}
response = requests.get('https://www.google.com/', headers=headers)
print(response.text)
  1. 添加cookies



import requests
 
cookies = {'cookies': 'value'}
response = requests.get('https://www.google.com/', cookies=cookies)
print(response.text)
  1. 使用timeout



import requests
 
response = requests.get('https://www.google.com/', timeout=1)
print(response.text)
  1. 使用proxies



import requests
 
proxies = {
  'http': 'http://10.10.1.10:3128',
  'https': 'http://10.10.1.10:1080',
}
response = requests.get('https://www.google.com/', proxies=proxies)
print(response.text)
  1. 使用auth



import requests
 
from requests.auth import HTTPBasicAuth
 
response = requests.get('https://www.google.com/', auth=HTTPBasicAuth('user', 'pass'))
print(response.text)
  1. 使用files



import requests
 
files = {'file': open('report.xls', 'rb')}
response = requests.post("https://httpbin.org/post", files=files)
print(response.text)
  1. 使用json



import requests
 
json = {'key': 'value'}
response = requests.post("https://httpbin.org/post", json=json)
print(response.text)
  1. 使用session



import requests
 
session = requests.Session()
session.auth = ('user', 'pass')
 
response = session.get('https://www.google.com/')
print(response.text)
  1. 使用response



import requests
 
response = requests.get('https://www.google.com/')
 
print(response.status_code)  # 状态码
print(response.headers)      # 头部信息
print(response.cookies)      # cookies
print(response.url)          # URL
print(response.history)      # 历史记录
  1. 处理HTTPS证书



import requests
 
response = requests.get('https://www.google.com/', verify=False)
print(response.text)
  1. 处理超链接



import requests
 
response = requests.get('https://example.org/my_username/')
print(response.links['next']['url'])
  1. 使用hooks



import requests
 
def my