当前位置: 首页 > news >正文

python实现屏幕录制,录音录制工具

python实现屏幕录制,录音录制工具

一,介绍

        Python 实现的屏幕录制和录音录制工具是一个便捷的应用程序,旨在帮助用户同时捕捉计算机屏幕上的活动以及与之相关的音频输出。这个工具尤其针对教育工作者、内容创作者、技术支持人员以及任何需要展示互动过程或共享实时演示的用户。

二,主要功能

  1. 屏幕录制:捕捉整个屏幕或指定区域的视频,能够以 AVI 或 MP4 等格式保存。
  2. 音频录制:能够选择录制系统音(计算机播放的音频)或外部环境声音(通过麦克风录制的声音),并将其保存为 WAV 格式文件。
  3. 多线程执行:实现屏幕录制与音频录制并行进行,确保同时捕捉视觉和听觉信息。
  4. 用户友好的图形界面:使用 Tkinter 库创建简单直观的用户界面,便于用户操作和设置录制参数。

1.作用

  1. 教育与培训:教师可以录制在线课程、课程演示或教学内容,方便学生回看和复习。
  2. 演示与演讲:讲师或营销人员可以创建产品演示和视频演讲,便于直观展示功能和效果。
  3. 技术支持与远程协助:技术支持人员可以记录故障排除过程,帮助用户解决问题,同时提供反馈和解决方案。
  4. 内容创作:内容创造者(如YouTuber和博主)可以制作视频教程、评论和游戏实况,增强与观众的互动。

2.目的

        这个工具的主要目的是为用户提供一种高效、简便的方式来创建与记录屏幕活动和音频内容,减少传统录制过程中的复杂性,使制作视频内容变得更加可及与灵活。此外,此工具帮助用户以更直观、生动的方式记录和分享他们的工作或创意,有助于知识传播和信息共享。

        通过集成屏幕录制与音频录制的功能,用户能够更全面地展现信息,提高内容的质量和吸引力,符合当今数字化学习与远程工作的需求。

三,用python实现录音功能 

import tkinter as tk  
# 导入 tkinter 库,用于创建图形用户界面 (GUI)。  from tkinter import filedialog, messagebox  
# 从 tkinter 中导入文件选择对话框和消息框。  import pyaudio  
# 导入 pyaudio 库,用于音频录制。  import wave  
# 导入 wave 库,用于保存音频为 WAV 格式。  import sounddevice as sd  
# 导入 sounddevice 库,用于录制系统声音。  import numpy as np  
# 导入 numpy 库,通常用于数值计算,但在这个例子中未明显使用。  import soundfile as sf  
# 导入 soundfile 库,用于保存音频文件(如 WAV)。  class AudioRecorderApp:  # 定义一个类 AudioRecorderApp,表示音频录制工具。  def __init__(self, root):  # 构造函数,初始化应用程序界面。  self.root = root  self.root.title("音频录制工具")  # 设置窗口标题。  self.record_option = tk.StringVar(value="external")  # 创建一个字符串变量,用于存储录音方式(外部音频或系统音频)。  self.duration = tk.IntVar(value=10)  # 创建一个整型变量用于存储录音时长,默认为10秒。  self.output_filename = None  # 初始化保存文件名为 None,稍后选择保存位置时会更新。  # 录音方式选择  tk.Label(root, text="选择录音方式:").pack(pady=10)  # 创建标签,提示用户选择录音方式。  tk.Radiobutton(root, text="外部环境声音", variable=self.record_option, value="external").pack(anchor=tk.W)  # 创建单选按钮,选择外部环境声音录制方式。  tk.Radiobutton(root, text="系统声音", variable=self.record_option, value="system").pack(anchor=tk.W)  # 创建单选按钮,选择系统声音录制方式。  # 录制时长输入  tk.Label(root, text="录音时长(秒):").pack(pady=10)  # 创建标签,提示用户输入录音时长。  tk.Entry(root, textvariable=self.duration).pack()  # 创建文本输入框,用户输入录音时长。  # 选择保存位置按钮  tk.Button(root, text="选择保存位置", command=self.select_output_file).pack(pady=10)  # 创建按钮,点击后选择保存文件的位置。  # 开始录音按钮  tk.Button(root, text="开始录音", command=self.start_recording).pack(pady=20)  # 创建按钮,点击后开始录音。  def select_output_file(self):  # 定义选择保存文件名的方法。  self.output_filename = filedialog.asksaveasfilename(defaultextension=".wav",  filetypes=[("WAV files", "*.wav"),  ("All files", "*.*")])  # 弹出文件对话框,让用户选择保存的文件名和位置。  if self.output_filename:  messagebox.showinfo("选择成功", f"保存位置:{self.output_filename}")  # 如果用户选择了文件名,弹出提示框确认选择。  def start_recording(self):  # 定义开始录音的方法。  if not self.output_filename:  messagebox.showwarning("警告", "请先选择保存位置!")  # 如果未选择保存位置,弹出警告提示。  return  if self.record_option.get() == "external":  self.record_external_sound()  # 如果选择外部音频,调用外部音频录制函数。  else:  self.record_system_sound()  # 否则调用系统声音录制函数。  def record_external_sound(self):  # 定义外部声音录制的方法。  chunk = 4096  # 每次读取的音频数据块大小。  format = pyaudio.paInt16  # 设置音频格式为 16 位深度。  channels = 2  # 设置为立体声(两个通道)。  rate = 96000  # 设置采样率为 96 kHz。  duration = self.duration.get()  # 获取用户输入的录音时长。  p = pyaudio.PyAudio()  # 初始化 PyAudio。  stream = p.open(format=format,  channels=channels,  rate=rate,  input=True,  frames_per_buffer=chunk)  # 打开音频流进行录制。  frames = []  # 创建一个空列表,用于存储录音数据。  messagebox.showinfo("信息", "开始录制外部声音...")  # 弹出提示框,通知用户开始录音。  for _ in range(0, int(rate / chunk * duration)):  data = stream.read(chunk)  # 循环读取音频数据块。  frames.append(data)  # 将读取的数据块添加到 frames 列表中。  stream.stop_stream()  # 停止音频流。  stream.close()  # 关闭音频流。  p.terminate()  # 终止 PyAudio 会话,释放资源。  with wave.open(self.output_filename, 'wb') as wf:  # 以写入模式打开 WAV 文件。  wf.setnchannels(channels)  # 设置音频通道数。  wf.setsampwidth(p.get_sample_size(format))  # 设置样本宽度。  wf.setframerate(rate)  # 设置采样率。  wf.writeframes(b''.join(frames))  # 将所有录制的帧写入文件。  messagebox.showinfo("信息", "外部声音录制完成。")  # 弹出提示框,通知用户外部声音录制完成。  def record_system_sound(self):  # 定义录制系统声音的方法。  fs = 192000  # 设置采样率为 192 kHz。  duration = self.duration.get()  # 获取用户输入的录音时长。  messagebox.showinfo("信息", "开始录制系统声音...")  # 弹出提示框,通知用户开始录制系统声音。  audio = sd.rec(int(duration * fs), samplerate=fs, channels=2, dtype='float32', blocking=True)  # 使用 sounddevice 库录制音频,blocking=True 参数确保录制完成后再继续执行后面的代码。  sf.write(self.output_filename, audio, fs)  # 使用 soundfile 库将录制的音频保存为 WAV 文件。  messagebox.showinfo("信息", "系统声音录制完成。")  # 弹出提示框,通知用户系统声音录制完成。  if __name__ == "__main__":  root = tk.Tk()  # 创建主窗口。  app = AudioRecorderApp(root)  # 初始化音频录制工具类。  root.mainloop()  # 启动 tkinter 事件循环,运行应用程序。

 运行结果:

 

代码功能概述

这段代码实现了一个简单的音频录制工具,用户可以选择录制外部环境声音或系统声音。它具有以下功能:

  1. 界面创建:使用 tkinter 创建图形用户界面,包括选择录音方式(外部音频或系统音频)、输入录音时长、选择保存文件位置和开始录音的按钮。

  2. 选择文件保存位置:用户可以通过文件对话框选择录音文件的存储路径及文件名。

  3. 录音

    • 外部声音录制:使用 PyAudio 库录制外部环境的声音,并将录制的数据保存为 WAV 文件。
    • 系统声音录制:使用 sounddevice 库录制系统声音并保存为 WAV 文件。
  4. 反馈提示:在录音开始和结束时,程序会通过消息框向用户提供相关信息和提示。

注意事项

  • 确保已安装所需的库:tkinterpyaudiowavesounddevicenumpysoundfile,可以通过 pip install 命令安装这些库。
  • 该代码适用于 Windows 和部分 Linux 系统,但在 macOS 上可能需要额外配置,因为音频流的访问权限可能会有所不同。
  • 录音时,确保已选择正确的录音设备以获得更好的音质。

四,用python实现录屏录音功能

 

import tkinter as tk  
# 导入 tkinter 库,创建图形用户界面(GUI)。  from tkinter import filedialog, messagebox  
# 从 tkinter 导入文件对话框(filedialog)和消息框(messagebox)模块。这用于选择文件和显示异步消息。  import pyaudio  
# 导入 PyAudio 库,用于音频输入/输出。  import wave  
# 导入 Wave 库,用于处理 WAV 音频文件。  import sounddevice as sd  
# 导入 sounddevice 库,用于进行系统声音的录制。  import numpy as np  
# 导入 numpy 库,为数据处理提供支持。  import cv2  
# 导入 OpenCV 库,用于图像处理和视频录制。  import pyautogui  
# 导入 pyautogui 库,用于截屏。  import threading  
# 导入 threading 库,用于创建多线程。  class AudioRecorderApp:  # 定义一个类 AudioRecorderApp,表示音频录制工具应用。  def __init__(self, root):  # 构造函数,初始化应用程序界面。  self.root = root  self.root.title("音频录制工具")  # 设置窗口标题。  self.record_option = tk.StringVar(value="external")  # 创建一个字符串变量,存储录音方式,默认为“外部声音”。  self.duration = tk.IntVar(value=10)  # 创建一个整型变量,存储录音时长,默认为10秒。  self.output_filename = None  # 初始化输出文件名为 None,稍后选择保存路径时会更新。  self.is_recording = False  # 初始化录音状态为 False。  # 录音方式选择  tk.Label(root, text="选择录音方式:").pack(pady=10)  # 创建标签提示用户选择录音方式。  tk.Radiobutton(root, text="外部环境声音", variable=self.record_option, value="external").pack(anchor=tk.W)  # 创建单选按钮用于选择“外部环境声音”录制方式。  tk.Radiobutton(root, text="系统声音", variable=self.record_option, value="system").pack(anchor=tk.W)  # 创建单选按钮用于选择“系统声音”录制方式。  # 选择保存位置按钮  tk.Button(root, text="选择保存位置", command=self.select_output_file).pack(pady=10)  # 创建按钮,点击后选择保存文件的路径。  tk.Label(root, text="录音时长(秒):").pack(pady=10)  # 创建标签,指导用户输入录音时长。  tk.Entry(root, textvariable=self.duration).pack()  # 创建文本框,用户输入录音时长。  # 开始录音按钮  tk.Button(root, text="开始录音", command=self.start_recording).pack(pady=20)  # 创建按钮,点击后开始录音。  def select_output_file(self):  # 定义选择保存文件名的方法。  self.output_filename = filedialog.asksaveasfilename(defaultextension=".wav",  filetypes=[("WAV files", "*.wav"),  ("所有文件", "*.*")])  # 弹出文件对话框,让用户选择保存的文件名和位置。  if self.output_filename:  messagebox.showinfo("选择成功", f"保存位置:{self.output_filename}")  # 如果用户选择了文件名,弹出提示框确认选择。  def start_recording(self):  # 定义开始录音的方法。  if not self.output_filename:  messagebox.showwarning("警告", "请先选择保存位置!")  # 如果未选择保存位置,弹出警告提示。  return  self.is_recording = True  duration_sec = self.duration.get()  # 获取用户输入的录音时长。  # 启动音频录制线程  audio_thread = threading.Thread(target=self.record_audio)  audio_thread.start()  # 创建一个新线程,运行录音函数。  # 启动屏幕录制线程  screen_thread = threading.Thread(target=self.record_screen)  screen_thread.start()  # 创建另一个线程,用于录制屏幕。  # 设置录制的持续时间  threading.Timer(duration_sec, self.stop_recording).start()  # 设置计时器,到达时间后停止录def record_audio(self):  # 定义录制音频的方法。  if self.record_option.get() == "external":  self.record_external_sound()  # 如果选项为“external”,则调用录制外部声音的方法。  elif self.record_option.get() == "system":  self.record_system_sound()  # 如果选项为“system”,则调用录制系统声音的方法。  def record_external_sound(self):  # 定义录制外部声音的方法。  chunk = 4096  # 设置每次读取的音频块大小。  format = pyaudio.paInt16  # 设置音频格式为16位整型。  channels = 2  # 设置音频通道数为2(立体声)。  rate = 44100  # 设置采样率为44100Hz。  duration = self.duration.get()  # 获取录音持续时间。  p = pyaudio.PyAudio()  # 创建 PyAudio 实例。  stream = p.open(format=format, channels=channels, rate=rate, input=True, frames_per_buffer=chunk)  # 打开音频流以进行录音。  frames = []  # 用于存储录制的音频帧。  messagebox.showinfo("信息", "开始录制外部声音...")  # 弹出提示框,通知用户开始录制。  for _ in range(0, int(rate / chunk * duration)):  # 根据设置的采样率和时长计算需循环的次数。  data = stream.read(chunk)  # 从音频流中读取音频数据。  frames.append(data)  # 将读取的数据添加到帧列表中。  stream.stop_stream()  # 停止音频流。  stream.close()  # 关闭音频流。  p.terminate()  # 终止 PyAudio 实例。  with wave.open(self.output_filename, 'wb') as wf:  # 使用 wave 模块以写入模式打开 WAV 文件。  wf.setnchannels(channels)  # 设置声道数。  wf.setsampwidth(p.get_sample_size(format))  # 设置采样宽度。  wf.setframerate(rate)  # 设置采样率。  wf.writeframes(b''.join(frames))  # 写入帧数据到文件。  messagebox.showinfo("信息", "外部声音录制完成。")  # 弹出提示框,表示录制完成。  def record_system_sound(self):  # 定义录制系统声音的方法。  fs = 192000  # 设置采样率为192000Hz。  duration = self.duration.get()  # 获取录音持续时间。  messagebox.showinfo("信息", "开始录制系统声音...")  # 弹出提示框,通知用户开始录制。  audio = sd.rec(int(duration * fs), samplerate=fs, channels=2, dtype='float32', blocking=True)  # 使用 sounddevice 库录制系统声音,设置时长、采样率、声道数和数据类型。  sf.write(self.output_filename, audio, fs)  # 将录制的数据写入指定文件。  messagebox.showinfo("信息", "系统声音录制完成。")  # 弹出提示框,表示录制完成。  def record_screen(self):  # 定义录制屏幕的方法。  output_file = self.output_filename.replace('.wav', '.avi')  # 保存为AVI格式  fourcc = cv2.VideoWriter_fourcc(*'XVID')  # 设置视频编码方式为 XVID。  fps = 20.0  # 设置帧率为20帧每秒。  screen_size = (1920, 1080)  # 根据您的屏幕分辨率调整  # 指定屏幕尺寸。  out = cv2.VideoWriter(output_file, fourcc, fps, screen_size)  # 创建 VideoWriter 对象,负责写入视频文件。  messagebox.showinfo("信息", "开始录制屏幕...")  # 弹出提示框,通知用户开始录制。  duration_sec = self.duration.get()  # 获取录制的持续时间。  for _ in range(int(duration_sec * fps)):  # 将fps转换为整数  img = pyautogui.screenshot()  # 截取屏幕  frame = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)  # 转换为OpenCV格式  out.write(frame)  # 写入视频  cv2.waitKey(int(1000 / fps))  # 控制帧率  out.release()  # 释放视频文件  messagebox.showinfo("信息", "屏幕录制完成。")  # 弹出提示框,表示屏幕录制完成。  def stop_recording(self):  # 定义停止录制的方法。  self.is_recording = False  # 更新录音状态为 False。  messagebox.showinfo("信息", "录制已停止。")  # 弹出提示框,通知用户录制已停止。  if __name__ == "__main__":  root = tk.Tk()  # 创建 Tkinter 窗口的根对象。  app = AudioRecorderApp(root)  # 创建 AudioRecorderApp 的实例,传入根对象。  root.mainloop()  # 启动 Tkinter 主事件循环,等待用户操作。

运行结果:

 

功能总结

以上代码是一个音频和屏幕录制工具的实现,主要功能包括:

  1. 选择录音方式:用户可以选择录制“外部环境声音”或“系统声音”。
  2. 选择保存位置:用户可以选择保存录制音频和视频的文件位置。
  3. 设置录音时长:用户可以输入录制的时长(以秒为单位)。
  4. 启动录制
    • 启动录制外部声音或系统声音。
    • 启动屏幕录制,录制屏幕内容并将其保存为 AVI 格式视频。
  5. 多线程支持:使用 Python 的线程库并行录制音频和屏幕,可以提高效率。
  6. 停止录制:可以在指定的时间后自动停止录制,或手动调用停止录制的函数。

使用此应用程序,用户可以轻松地录制音频和视频,创建教程或其他需要录制的内容。

 

相关文章:

python实现屏幕录制,录音录制工具

python实现屏幕录制,录音录制工具 一,介绍 Python 实现的屏幕录制和录音录制工具是一个便捷的应用程序,旨在帮助用户同时捕捉计算机屏幕上的活动以及与之相关的音频输出。这个工具尤其针对教育工作者、内容创作者、技术支持人员以及任何需要…...

elementui 的 table 组件回显已选数据时候使用toggleRowSelection 方法的坑点

elementui 的 table 组件回显问题 "vue": "^2.7.16", "element-ui": "^2.15.14", 问题描述: 场景:首先我们是通过接口获取到数据之后 然后将返回的数据回显到表格上面 问题:直接将后端返回的数据…...

MATLAB基础应用精讲-【数模应用】负二项回归(附R语言和python代码实现)

目录 前言 几个高频面试题目 负二项回归、Probit回归如何选择 负二项回归 Probit回归 知识储备 逻辑回归 算法原理 多阈值负二项回归模型 模型及估计方法 负二项回归模型 多阈值负二项回归模型 分割阶段 精确估计阈值阶段 ​‌负二项回归的操作步骤 负二项回归…...

20240803 芯动科技 笔试

文章目录 1、单选题1.11.21.31.42、填空题2.12.23、问答题3.13.23.34、编程题4.14.24.3岗位:嵌入式软件工程师(25届校招)(J12042) 题型:4 道单选题,2 道填空题, 3 道简答题,3 道编程题 1、单选题 1.1 已知 5 个元素的出栈序列是 1,2,3,4,5,6 则对应的入栈顺序可能是 …...

如何将 ECharts 图表插入 HTML Canvas

在 Web 开发中,数据可视化是一个常见且重要的需求。ECharts 是一个强大的图表库,而 HTML5 Canvas 则提供了灵活的绘图能力。今天,我们将探讨如何将这两者结合起来,实现将 ECharts 生成的图表插入到 HTML Canvas 中的特定位置。 为…...

突破干扰,无人机自动驾驶技术详解

突破干扰的无人机自动驾驶技术,是一个结合了多学科领域的复杂系统,旨在确保无人机在复杂电磁环境、人为干扰等条件下仍能自主、安全地完成飞行任务。以下是对该技术的详细解析: 一、技术概述 无人机自动驾驶技术通过集成传感器技术、人工智…...

Xamarin学习计划

一、Xamarin 的产生历程 Xamarin 由 Nat Friedman 和 Miguel de Icaza 创立。它的出现主要是为了让开发者能够使用 C#语言来构建跨平台的移动应用程序。 Xamarin 提供了一种统一的开发方式,允许开发者使用熟悉的 C#语言和.NET 框架来开发同时适用于多个平台的应…...

exchange online邮件系统EAM双因素认证技术方案

exchange online邮件系统是指微软推出的电子邮件系统云服务,通常作为office 365和microsoft 365的一个子项目来提供服务。这样用户就不需要自己部署exchange邮件服务器,只需要订阅微软的云服务,然后就可以直接使用微软提供的exchange邮件服务…...

【数据结构与算法】栈和队列

文章目录 一.栈1.1定义 顺序栈和链式栈1.2基本操作1.2.1表示1.2.2初始化1.2.3清空1.2.4销毁1.2.5入栈1.2.6出栈1.2.7取栈顶 1.3共享栈1.3.1定义1.3.2进栈出栈 二.队列2.1定义 顺序队列和链式队列循环队列2.2基本操作2.2.1初始化2.2.2判空2.2.3求队列长度2.2.4取队头元素2.2.5销…...

基于php的图书管理系统

摘 要 随着互联网的发展,许多人都热衷于在线购物,无需离开家就可以获得所需的产品,通过简单的操作,就能够获得快速、准确的配送。 科技已然渗透到进社会的方方面面,让我们的学习、交流、工作变得无比轻松自如。由于…...

k8s Node节点维护

Kubernetes (K8s) 中对 Node 节点的维护是保证集群健康和性能的重要部分。Node 节点通常是 Kubernetes 工作负载的运行环境,负责运行 Pods。当需要对节点进行维护(如升级、修复问题、调整配置等)时,可能需要将该节点标记为不可用并…...

【航天宏图旗下的PIE engine】

航天宏图旗下的PIE engine是一个集实时分布式计算、交互式分析和数据可视化为一体的在线遥感云计算开放平台,以下是对其的详细介绍: 一、平台背景与定位 PIE-Engine地球科学引擎是航天宏图自主研发的一套基于容器云技术构建的面向地球科学领域的专业P…...

Python酷库之旅-第三方库Pandas(157)

目录 一、用法精讲 716、pandas.Timedelta.view方法 716-1、语法 716-2、参数 716-3、功能 716-4、返回值 716-5、说明 716-6、用法 716-6-1、数据准备 716-6-2、代码示例 716-6-3、结果输出 717、pandas.Timedelta.as_unit方法 717-1、语法 717-2、参数 717-3、…...

【原创】java+springboot+mysql校园表白墙网站设计与实现

个人主页:程序猿小小杨 个人简介:从事开发多年,Java、Php、Python、前端开发均有涉猎 博客内容:Java项目实战、项目演示、技术分享 文末有作者名片,希望和大家一起共同进步,你只管努力,剩下的交…...

CSS学习(Grid布局和flex布局比较)

grid网格布局真香,比flex方便太多了,grid-template-columns用法 文章目录 flex布局的时候网格grid布局的时候可以修改某一列的像素可以修改某一列的宽度占比自适应屏幕分列让第一个元素长宽都占2个 flex布局的时候 最后一行不够4个的时候 最下面一行无法…...

RTThread-Nano学习二-RT-Thread启动流程

一、简介 上一章,我们已经了解了如何通过MDK来移植RTT,不熟悉的可以看如下链接:RTThread-Nano学习一-基于MDK移植-CSDN博客本章我们就来继续了解一下,RTT的启动流程。 二、启动流程 官方给了一幅非常清晰的启动流程图&am…...

排查sshfs挂载失败的问题

#排查sshfs挂载失败的问题 写代码在Linux上运行,但是熟悉的IDE(比如VS code)在自己的电脑上,可以使用sshfs把linux上的目录挂载到本地,再用VScode打开即可,可以使用下面的命令: sshfs -odebug…...

【002】基于Spring Boot+Unipp的古诗词学习小程序【原创】

一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构:B/S架构 运行环境:win10/win11、jdk17 前端: 技术:框架Vue.js;UI库:ElementUI; 开发工具&…...

PageHelper循环依赖问题

1. 问题 2. 原因 项目中SpringBoot的版本为2.7.18。 SpringBoot2.6.x后不推荐使用循环依赖,也就是说从2.6.x版本开始,如果项目里还存在循环依赖,SpringBoot将拒绝启动! 3. 解决 去pageHelper github看,才看到新版本…...

k8s部署Kafka集群超详细讲解

准备部署环境 Kubernetes集群信息 NAMEVERSIONk8s-masterv1.29.2k8s-node01v1.29.2k8s-node02v1.29.2 Kafka:3.7.1版本,apche版本 Zookeeper:3.6.3版本 准备StorageClass # kubectl get sc NAME PROVISIONER RECLA…...

避坑指南:在OpenHarmony ESP32上驱动INMP441麦克风时,I2S库编译报错的排查与解决

深度解析:OpenHarmony ESP32驱动INMP441麦克风的I2S编译问题全攻略 当你在OpenHarmony环境下为ESP32开发板移植INMP441数字麦克风驱动时,是否遇到过I2S库编译报错的困扰?这个问题看似简单,实则涉及编译系统、依赖管理和硬件抽象层…...

代理商客户归管+赊欠账明细查询,易特进销存商贸版一键解决

做商贸生意的朋友,大概率会遇到这样的难题:发展了代理商拓展市场,代理商的客户却需要公司统一管理,既要明确客户归属,又要精准统计赊欠账目。比如代理商张三,总共欠公司1万元,查账时想清晰看到他…...

白嫖DeepSeek、GLM、MiniMax、Kimi等大模型,每天 1亿 Token 免费领!

每天免费领 1亿 Token,白嫖DeepSeek、GLM、MiniMax、Kimi等大模型! 最近折腾 AI 编程的朋友估计挺多的。这玩意儿现在进化得确实有点吓人。就拿名气最大的 Claude Code 来说,它这个命令行工具直接把写代码变成了“在线聊天”。你只要嘴上说清…...

交付验收前批量筛一遍配图质量:桌面工具用法记录

如果你经常遇到这种场景:项目交付包里附带大量截图、现场照片,甲方要求「明显糊的、过曝的别混进来」,但文件夹嵌套很深,人工抽查像抽奖。可以试一款只做「打分按档归类」的 Windows 桌面工具,全称【批量图片质量检测筛…...

OpenClaw安全实践:千问3.5-27B私有化部署下的权限管控

OpenClaw安全实践:千问3.5-27B私有化部署下的权限管控 1. 为什么需要关注OpenClaw的安全配置? 去年我在尝试用OpenClaw自动整理财务报表时,差点酿成一场灾难。当时我的脚本误将未加密的财务数据同步到了公开目录,幸亏及时发现。…...

51单片机入门难点解析与高效学习路径

1. 为什么51单片机入门难?问题出在哪里?很多初学者在接触51单片机时,都会遇到一个奇怪的现象:明明大家都说51单片机简单,但自己学起来却特别吃力。作为一个带过上百名单片机新手的工程师,我发现这个问题通常…...

智慧校园软件怎么选?看懂这 5 个核心功能再决定不迟

✅作者简介:合肥自友科技 📌核心产品:智慧校园软件(包括教工管理、学工管理、教务管理、考务管理、后勤管理、德育管理、资产管理、公寓管理、实习管理、就业管理、离校管理、科研平台、档案管理、学生平台等26个子平台) 。公司所有人员均有多…...

大学生保护动物网页——web网页期末大作业

(文件先保存到自己网盘,谨防文件丢失!!) 源码获取地址 链接: https://pan.baidu.com/s/1bz6nL9WPBBsxxWVmBAfGXw?pwdrcwi提取码: rcwihtml个人网页源码 ✅ 网页一共4个页面 ✅ 网页使用html css完成 布局简单 ✅ 文…...

2026届毕业生推荐的AI学术工具实测分析

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 于毕业论文写作进程里,人工智能工具可充作辅助方式用以提高效率。学生能借AI开展…...

解决RDK X5(ARM64架构)板卡Remote-SSH运行Antigravity AI崩溃(SIGILL):Samba网络盘本地挂载方案

一、前言最近在折腾 D-Robotics 的 RDK X5 板卡(搭载 Sunrise X5 芯片,ARM Cortex-A55 架构)。在尝试使用强大的 Antigravity IDE 通过 Remote-SSH 远程连接板卡进行开发时,遇到了一个极其头疼的问题:AI 侧边栏完全不可…...