使用 GSYVideoPlayer 实现视频播放
GSYVideoPlayer 是一款基于 Android 平台的强大视频播放库,支持多种播放模式和丰富的自定义功能,适合用来快速集成视频播放功能。最近打开了以前要实现的Nb视频(改成了lowb视频)发现哇真的是我写的吗🤣😂🙃🤪🤐🙄😵 (北纬哥还说真要这么写可以去讨饭了😂) 不说了 重构下 一、引入依赖1implementation 'com.github.CarGuo.GSYVideoPlayer:gsyvideoplayer:v10.0.0' //核心不变还是老郭的GSY 但是版本来到了10.0 二、布局文件添加播放器控件视频控件还是简单的SampleVideo但是自定义了些功能 12345678910111213<com.example.videoplayer.video.SampleVideo android:id="@+id/detail_player" android:layout_width="match_parent" ...
YOLOv5 目标检测原理与实战
YOLOv5 目标检测原理与实战 YOLO(You Only Look Once)系列是目前非常流行的实时目标检测算法,YOLOv5 是其最新版本之一,以速度快、准确度高和部署方便著称。下面简要介绍其原理和实战方法。 一、YOLOv5 原理简介YOLOv5 属于单阶段检测器(single-stage detector),即只需一次前向传播即可完成目标定位和分类,区别于两阶段检测器(如 Faster R-CNN)。 输入处理:将输入图像划分为固定网格(如 13×13、26×26 等)。 边界框预测:每个网格预测多个边界框及其置信度。 类别概率:每个边界框还会预测目标类别的概率分布。 多尺度预测:采用不同尺度特征层进行预测,增强对大小目标的检测能力。 非极大值抑制(NMS):去除重叠度高的重复检测框,保留最优结果。 二、环境准备安装 PyTorch 和 YOLOv5 依赖: 12pip install torch torchvisionpip install -U...
Python 多线程爬虫开发
Python 多线程爬虫开发 爬虫项目中,网络请求通常是耗时操作,使用多线程可以提升抓取效率。Python 标准库提供了 threading 模块,配合队列等工具,可以简单实现多线程爬虫。 一、多线程基础 threading.Thread 创建线程对象。 使用 threading.Lock 保护共享资源。 queue.Queue 用于线程间安全的任务调度。 二、示例代码框架12345678910111213141516171819202122232425262728293031323334353637383940414243import threadingimport queueimport requests# 任务队列url_queue = queue.Queue()# 线程工作函数def worker(): while True: url = url_queue.get() if url is None: # 退出信号 break try: response =...
深入理解 Java 内存模型
Java 内存模型(Java Memory Model,简称 JMM)是并发编程中至关重要的一部分,它定义了在多线程环境下变量的可见性、有序性与原子性等关键行为。下面我们从基础到进阶,带你理解 JMM 的核心机制。 一、什么是 Java 内存模型?JMM 是 Java 虚拟机(JVM)中关于多线程共享内存访问的规范,它描述了: 各线程如何将变量从主内存拷贝到工作内存 变量在何时对其他线程可见 编译器与 CPU 可进行哪些指令重排序优化 JMM 并不是真实存在的一块内存,而是一种抽象规范。 二、JMM 的关键概念1. 主内存与工作内存 主内存(Main Memory):所有线程共享的区域,保存所有变量的真实值。 工作内存(Working Memory):每个线程私有,保存变量的副本。 线程操作变量流程如下: 1主内存 ←→ 工作内存 ←→ 执行引擎 2. 可见性当一个线程修改了变量,必须刷新回主内存,否则其他线程看不到这个修改。使用 volatile 可以保证可见性。 3. 有序性编译器和处理器会对代码进行指令重排序,但 JMM...
TensorFlow 训练自己的图像分类器
TensorFlow 训练自己的图像分类器 使用 TensorFlow 训练图像分类器,可以快速搭建属于自己的模型来识别不同类别的图片。下面是一个简明的流程和示例。 一、准备数据集 收集并整理训练数据,通常每个类别放在一个独立文件夹内。 例如: 1234567dataset/├── cats/│ ├── cat1.jpg│ ├── cat2.jpg├── dogs/│ ├── dog1.jpg│ ├── dog2.jpg 二、环境准备安装 TensorFlow: 1pip install tensorflow 三、搭建模型使用 TensorFlow Keras API 构建一个简单的卷积神经网络(CNN): 12345678910111213141516171819import tensorflow as tffrom tensorflow.keras import layers, modelsmodel = models.Sequential([ layers.Rescaling(1./255, input_shape=(180, 180,...
Java 设计模式实践
Java设计模式实践 设计模式是软件开发中解决常见问题的最佳实践,下面列出几种常用设计模式及其基础使用方法示例。 1. 单例模式(Singleton)确保一个类只有一个实例,提供全局访问点。 123456789101112public class Singleton { private static Singleton instance; private Singleton() {} public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; }} 2. 工厂模式(Factory...
Android 音视频开发基础
最近在研究 Android 播放器项目(起初是某个坑货准备大展宏图搞个niubi视频),GSYVideoPlayer 是一个使用简单、功能丰富的开源播放器。以下记录一下 GSYVideo 的基础使用,方便以后查阅和复用。 文档以 v8.x 为参考,若后续版本有变化请以官方为准:https://github.com/CarGuo/GSYVideoPlayer 一、集成方式在 app/build.gradle 添加依赖: 1234567implementation 'com.github.CarGuo.GSYVideoPlayer:GSYVideoPlayer:v8.3.5-release-jitpack'````如果使用 Kotlin 或 Java 都兼容。确保项目使用了 JitPack 仓库:```groovymaven { url 'https://jitpack.io'...
Python 自动化脚本实践:屏幕控制与识别
Python 自动化脚本实践:屏幕控制与识别 在日常工作和生活中,重复的电脑操作和信息提取往往耗费大量时间。利用 Python 自动化脚本,结合屏幕控制和图像识别技术,可以高效完成这些任务。 一、屏幕控制基础Python 中常用的屏幕控制库是 pyautogui,支持鼠标移动、点击、键盘输入等操作。 12345678910import pyautogui# 移动鼠标到屏幕坐标(100, 200)pyautogui.moveTo(100, 200)# 点击鼠标左键pyautogui.click()# 输入文本pyautogui.typewrite('Hello, Python Automation!') 二、屏幕识别基础屏幕识别主要借助截图和图像匹配技术,pyautogui 也支持简单的图像查找;更高级的识别可用 OpenCV 和 pytesseract 进行图像处理和文字识别。 123456# 查找屏幕上是否有某个按钮图标location = pyautogui.locateOnScreen('button.png',...
Java 17 新特性简要介绍
Java 17 是另一个长期支持版本(LTS),于 2021 年发布,包含许多语言和平台的改进。下面列举几个值得关注的新特性: 1. 密封类(Sealed Classes)密封类允许限制哪些类可以继承或实现某个类或接口,从而更好地控制继承层次。 12345public sealed class Shape permits Circle, Rectangle {}public final class Circle extends Shape {}public final class Rectangle extends Shape {} 这样,只有 Circle 和 Rectangle 可以继承 Shape。 2. 强化的模式匹配(Pattern Matching)Java 17 对 instanceof 进行了增强,可以直接声明变量,减少样板代码。 123if (obj instanceof String s) { ...
Android 网络优化方案
大量网络交互的项目,页面加载慢、请求失败率高等问题频繁出现,趁机系统整理了一下 Android 网络层优化的一些思路,记录如下 —— 不一定全对,但是目前阶段我的理解,如有补充欢迎留言交流! 一、常见网络问题梳理在实际项目中,网络层容易遇到这些问题: 请求响应慢、首屏加载时间长 数据重复请求、过度消耗流量 网络失败率高,用户体验差 请求卡顿或 UI 卡顿(主线程阻塞) 电量消耗大(后台频繁请求) 二、基础优化方案1. 使用高效的网络框架目前推荐: OkHttp:底层 HTTP 客户端,支持连接复用、自动压缩、缓存等 Retrofit:基于 OkHttp 的封装,支持注解式请求、响应转换器 Volley / Ktor(Kotlin)也可选,根据项目栈定 优化建议: 复用 OkHttpClient 实例,避免频繁创建连接池 开启 HTTP 缓存:设置 Cache,减少重复请求 123456789101112131415161718192021222324252627282930313233343536373839int cacheSize = 10 *...










