机器学习笔记 – Keras中的回调函数Callback使用教程

人工智能67

一、概述

训练深度学习模型既简单又复杂。因为使用 TensorFlow(特别是tensorflow.keras)这样的库非常容易上手。但是,虽然创建第一个模型很容易,但在知道自己在做什么的同时对其进行微调则要复杂一些。

比如,您需要了解有关监督学习过程、梯度下降或其他优化、正则化以及许多其他影响因素。

因此,洞察正在发生的事情和自动化控制是调整深度学习模型非常重要的一点,以避免浪费时间进行人工干预。在 Keras 中,这可以通过tensorflow.keras.callbacksAPI 来实现。在本文中,我们将更详细地研究回调。我们将首先通过展示它们在监督机器学习过程中的作用来说明它们是什么。然后,我们介绍回调 API - 并针对每个回调,用示例说明它可以用于什么。最后,我们将展示如何使用tensorflow.keras.callbacks.Base该类创建自己的回调。

二、回调的作用

训练监督机器学习模型流程大致如下:

1、机器学习模型(通常是神经网络)被初始化。

2、训练集中的样本通过模型前馈,从而产生一组预测。

3、将预测与训练样本对应的标签进行比较,产生一个值(损失值)告诉我们模型预测和真值的差距。

4、基于损失值和随后的误差反向计算,进行权重微调,以期望模型表现得更好一些。然后,我们要么回到第 2 步,要么停止训练过程。

训练流程示意图如下

机器学习笔记 – Keras中的回调函数Callback使用教程

在机器学习术语中,每次迭代也称为epoch。因此,训练机器学习模型需要完成至少一次,但通常是多个epoch。我们通常不会一次前馈所有数据。相反,我们使用所谓的小批量方法——整批数据以称为小批量进行前馈。因此,每个 epoch 至少包含一个但通常是多个批次的数据。

现在,我们希望在对训练过程进行监控。这种情况下我们向Keras模型添加回调。回调是一个对象,它可以在训练的各个阶段(例如,在一个时期的开始或结束,单个批次之前或之后等)执行操作。

对于回调的时间点,Keras提供了多个定义。

on_train_begin、on_train_end --- 训练开始、训练结束

on_epoch_begin、on_epoch_end --- 一个epoch开始或结束

on_test_begin、on_test_end --- 评估模型开始或结束

on_predict_begin、on_predict_end --- 预测开始或结束

on_predict_batch_begin、on_predict_batch_end --- 批量预测开始或结束

on_train_batch_begin、on_train_batch_end、on_test_batch_begin、on_test_batch_end --- 批次输入到训练或测试过程之前或之后直接执行特定操作。

三、Keras回调API

现在我们了解了回调是什么,以及在基于 TensorFlow 2.x 的 Keras 中,哪些定义以及挂钩可用的"时间点"。现在,是时候看看 Keras 回调 API,即tensorflow.keras.callbacks,它是一组回调,可用于各种情况。

tensorflow.keras.callbacks它包含以下回调:

1、BaseLogger 回调:会积累训练轮平均评估的回调函数。

2、TerminateOnNaN 回调:如果损失值为非数字(NaN),则训练过程停止。

3、ProgbarLogger 回调:用于确定在 Keras 进度条中打印到标准输出的内容。

4、History 回调:

5、ModelCheckpoint 回调:可用于在每个 epoch 后自动保存一个模型,或者只保存最好的一个。

6、EarlyStopping 回调:确保在损失值不再提高时停止训练过程。

7、RemoteMonitor 回调:将 TensorFlow 训练事件发送到远程监视器,例如日志系统。

8、LearningRateScheduler 回调:基于一个scheduler函数在一个 epoch 开始之前更新学习率。

9、TensorBoard 回调:允许我们使用TensorBoard实时监控训练过程。

10、ReduceLROnPlateau 回调:如果损失值不再提高,则降低学习率。

11、CSVLogger 回调:将 epoch 的结果流式传输到 CSV 文件。

12、LambdaCallback:允许我们定义可以作为回调执行的简单函数。

四、如何添加回调

使用tensorflow.keras.callbacks API添加回调十分简单。

1、将特定回调导入。

2、初始化要使用的回调,包括它们的配置;

3、将回调添加到model.fit中。

通过这三个简单的步骤,回调与训练过程就会挂钩了。

例如,如果我们想同时使用ModelCheckpoint和EarlyStopping我们首先添加导入:

from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint

然后,对于步骤 (2),我们在列表中初始化回调:

keras_callbacks = [
      EarlyStopping(monitor='val_loss', patience=5, mode='min', min_delta=0.01),
      ModelCheckpoint(checkpoint_path, monitor='val_loss', save_best_only=True, mode='min')
]

然后,对于第 (3) 步,我们只需将回调添加到model.fit:

model.fit(train_generator,
          epochs=50,
          verbose=1,
          callbacks=keras_callbacks,
          validation_data=val_generator)

五、了解各个回调

1、默认应用:History 和 BaseLogger 回调

有两个回调是tensorflow.keras.callbacks虽然是API的一部分,但是它们已经应用于在Keras模型的底层,所以一般不需要手动调用。

它们是History和BaseLogger回调。

回调在调用时History生成一个History 对象model.fit。

回调累积基本指标以BaseLogger供稍后显示。

2、ModelCheckpoint

如果您想定期将您的 Keras 模型(或模型权重)保存到某个文件,那么您需要ModelCheckpoint回调。会以某种频率保存 Keras 模型或模型权重的回调。

示例如下:

tf.keras.callbacks.ModelCheckpoint(
    filepath, monitor='val_loss', verbose=0, save_best_only=False,
    save_weights_only=False, mode='auto', save_freq='epoch', options=None, **kwargs
)

参数说明:

filepath:您可以指定必须保存模型的位置。

monitor:如果您只想在某个数量发生变化时保存,您可以通过设置monitor。默认设置为验证损失。

verbose:可以指定回调输出是否应在标准输出(通常是终端)中输出。

save_best_only:如果您只想在准确率增加时保存模型,您可以设置save_best_only为True。

save_weights_only:通常,会保存整个模型- 即层堆栈以及模型权重。如果您只想保存权重(例如,因为您可以自己初始化模型),您可以设置save_weights_only为True.

mode:您可以确定monitor数量必须向哪个方向移动才能将其视为改进。您可以从中选择任何一个{auto, min, max}。设置为 时auto,mode根据monitor-with loss 来判断,例如为min; 准确地说,它将是max。

save_freq:允许指定save_freq何时保存模型。默认情况下,它在每个 epoch 后保存(或在每个 epoch 后检查它是否有所改进)。通过将'epoch'字符串更改为整数,您还可以指示 Keras 在每个nminibatch 后保存。

如果需要,您也可以指定其他兼容options的。查看ModelCheckpoint文档(请参阅参考资料中的链接)以获取有关这些options.

完整示例:

checkpoint_path=f'{os.path.dirname(os.path.realpath(__file__))}/covid-convnet.h5'
keras_callbacks = [
      ModelCheckpoint(checkpoint_path, monitor='val_loss', save_best_only=True, mode='min')
]
model.fit(train_generator,
          epochs=50,
          verbose=1,
          callbacks=keras_callbacks,
          validation_data=val_generator)

3、TensorBoard

使用TensorBoard可以实时可视化训练过程。通过 TensorBoard回调,您可以将 TensorBoard 与您的 Keras 模型链接。

机器学习笔记 – Keras中的回调函数Callback使用教程

回调将训练过程中的一系列项目记录到您的 TensorBoard 日志位置:

指标汇总图、训练图可视化、激活直方图、采样分析

示例如下:

tf.keras.callbacks.TensorBoard(
    log_dir='logs', histogram_freq=0, write_graph=True, write_images=False,
    update_freq='epoch', profile_batch=2, embeddings_freq=0,
    embeddings_metadata=None, **kwargs
)

参数说明:

log_dir: 用来保存被 TensorBoard 分析的日志文件的文件名。

istogram_freq: 对于模型中各个层计算激活值和模型权重直方图的频率(训练轮数中)。 如果设置成 0 ,直方图不会被计算。对于直方图可视化的验证数据(或分离数据)一定要明确的指出。

write_graph: 是否在 TensorBoard 中可视化图像。 如果 write_graph 被设置为 True,日志文件会变得非常大。

write_grads: 是否在 TensorBoard 中可视化梯度值直方图。 histogram_freq 必须要大于 0 。

batch_size: 用以直方图计算的传入神经元网络输入批的大小。

write_images: 是否在 TensorBoard 中将模型权重以图片可视化。

embeddings_freq: 被选中的嵌入层会被保存的频率(在训练轮中)。

embeddings_layer_names: 一个列表,会被监测层的名字。 如果是 None 或空列表,那么所有的嵌入层都会被监测。

embeddings_metadata: 一个字典,对应层的名字到保存有这个嵌入层元数据文件的名字。 查看 详情 关于元数据的数据格式。 以防同样的元数据被用于所用的嵌入层,字符串可以被传入。

embeddings_data: 要嵌入在 embeddings_layer_names 指定的层的数据。 Numpy 数组(如果模型有单个输入)或 Numpy 数组列表(如果模型有多个输入)。 Learn ore about embeddings。

update_freq: 'batch' 或 'epoch' 或 整数。当使用 'batch' 时,在每个 batch 之后将损失和评估值写入到 TensorBoard 中。同样的情况应用到 'epoch' 中。如果使用整数,例如 10000,这个回调会在每 10000 个样本之后将损失和评估值写入到 TensorBoard 中。注意,频繁地写入到 TensorBoard 会减缓你的训练。

完整示例:

keras_callbacks = [
      TensorBoard(log_dir="./logs")
]
model.fit(train_generator,
          epochs=50,
          verbose=1,
          callbacks=keras_callbacks,
          validation_data=val_generator)

4、EarlyStopping

一般应用EarlyStopping是用于当监控的指标长时间停止改进,希望模型就此停止训练的场景。

示例如下:

tf.keras.callbacks.EarlyStopping(
    monitor='val_loss', min_delta=0, patience=0, verbose=0, mode='auto',
    baseline=None, restore_best_weights=False
)

参数说明:

monitor是监控改进的数量;它类似于监控的数量ModelCheckpointing。

对于mode,{auto, min, max} 其中之一。 在 min 模式中, 当被监测的数据停止下降,训练就会停止;在 max 模式中,当被监测的数据停止上升,训练就会停止;在 auto 模式中,方向会自动从被监测的数据的名字中判断出来。

使用min_delta,您可以配置必须从当前发生的最小更改,monitor以便将更改视为改进。

使用patience,您可以指示在停止训练过程之前等待额外改进的时间。

使用verbose,您可以指定回调的详细程度,即是否将输出写入标准输出。

该baseline值可以配置为指定在任何更改都可以被视为改进monitor之前必须达到的最小值

如您所料,patience大于 0 将确保模型经过patience更多时期的训练,可能会使情况变得更糟。有了restore_best_weights,我们可以在训练过程停止时恢复表现最好的模型实例的权重。如果您在停止训练过程后直接执行模型评估,这将很有用。

完整示例:

keras_callbacks = [
      EarlyStopping(monitor='val_loss', min_delta=0.001, restore_best_weights=True)
]
model.fit(train_generator,
          epochs=50,
          verbose=1,
          callbacks=keras_callbacks,
          validation_data=val_generator)

5、LearningRateScheduler

学习率最好在早期迭代中相对较大,在后期阶段较低,我们必须在训练过程中调整学习率。这称为学习率衰减。LearningRateScheduler回调实现了这个功能。

在每个 epoch 开始时,此回调从schedule提供的函数中获取更新的学习率值,以及当前 epoch 和当前学习率,并将更新的学习率应用于优化器。

示例如下:

tf.keras.callbacks.LearningRateScheduler(
    schedule, verbose=0
)

参数说明:

接受一个schedule函数,您可以使用该函数来决定在每个时期必须如何安排学习率。

使用verbose,您可以决定在标准输出中说明回调输出。

完整示例:

def scheduler(epoch, learning_rate):
  if epoch < 15:
    return learning_rate
  else:
    return learning_rate * 0.99

keras_callbacks = [
      LearningRateScheduler(scheduler)
]
model.fit(train_generator,
          epochs=50,
          verbose=1,
          callbacks=keras_callbacks,
          validation_data=val_generator)

6、ReduceLROnPlateau

当标准评估停止提升时,降低学习速率。通过ReduceLROnPlateau回调,可以指示优化过程在遇到平台期时降低学习率(并因此降低步长)。

一旦学习停滞,模型通常会受益于将学习率降低 2-10 倍。此回调监视一个数量,如果"耐心"的 epoch 数量没有改善,则学习率会降低。

示例如下:

tf.keras.callbacks.ReduceLROnPlateau(
    monitor='val_loss', factor=0.1, patience=10, verbose=0, mode='auto',
    min_delta=0.0001, cooldown=0, min_lr=0, **kwargs
)

参数说明:

monitor: 被监测的数据。

factor: 学习速率被降低的因数。新的学习速率 = 学习速率 * 因数

patience: 没有进步的训练轮数,在这之后训练速率会被降低。

verbose: 整数。0:安静,1:更新信息。

mode: {auto, min, max} 其中之一。如果是 min 模式,学习速率会被降低如果被监测的数据已经停止下降; 在 max 模式,学习塑料会被降低如果被监测的数据已经停止上升; 在 auto 模式,方向会被从被监测的数据中自动推断出来。

min_delta: 对于测量新的最优化的阀值,只关注巨大的改变。

cooldown: 在学习速率被降低之后,重新恢复正常操作之前等待的训练轮数量。

min_lr: 学习速率的下边界。

完整示例:

keras_callbacks = [
      ReduceLROnPlateau(monitor='val_loss', factor=0.25, patience=5, cooldown=5, min_lr=0.000000001)
]
model.fit(train_generator,
          epochs=50,
          verbose=1,
          callbacks=keras_callbacks,
          validation_data=val_generator)

7、RemoteMonitor

回调用于将事件流式传输到服务器。

上面,我们看到训练日志可以分发到TensorBoard以进行可视化和日志记录。但是,您可能拥有自己的日志记录和可视化系统——无论是基于云的系统还是本地安装的 Grafana 或 Elastic Stack 可视化工具。

在这些情况下,您可能希望将训练日志发送到那里。RemoteMonitor回调可以帮助您做到这一点。

示例如下:

tf.keras.callbacks.RemoteMonitor(
    root='http://localhost:9000', path='/publish/epoch/end/', field='data',
    headers=None, send_as_json=False
)

参数说明:

root: 字符串;目标服务器的根地址。

path: 字符串;相对于 root 的路径,事件数据被送达的地址。

field: 字符串;JSON ,数据被保存的领域。

headers: 字典;可选自定义的 HTTP 的头字段。

send_as_json: 布尔值;请求是否应该以 application/json 格式发送。

8、Lambda

在训练进行中创建简单,自定义的回调函数的回调函数。

在这里,可以用 Python 定义填充基于 on_epoch_beginon_epoch_endon_batch_begin、和 _事件的参数。_它们在正确的时间点执行。 on_batch_end on_train_begin on_train_end

示例如下:

tf.keras.callbacks.LambdaCallback(
    on_epoch_begin=None, on_epoch_end=None, on_batch_begin=None, on_batch_end=None,
    on_train_begin=None, on_train_end=None, **kwargs
)

keras_callbacks = [
      LambdaCallback(on_batch_end=lambda batch, log_data: print(batch))
]
model.fit(train_generator,
          epochs=50,
          verbose=1,
          callbacks=keras_callbacks,
          validation_data=val_generator)

9、TerminateOnNaN

遇到 NaN 损失时终止训练的回调。

keras_callbacks = [
      TerminateOnNaN()
]
model.fit(train_generator,
          epochs=50,
          verbose=1,
          callbacks=keras_callbacks,
          validation_data=val_generator)

10、CSVLogger

把训练轮结果数据流到 csv 文件的回调函数。

该filename属性确定 CSV 文件的位置。如果没有,它将被创建。

该separator属性确定用什么字符分隔单行中的列,也称为分隔符。

使用append,您可以指示是否应将数据简单地添加到文件末尾,或者每次新文件都应覆盖旧文件。

keras_callbacks = [
      CSVLogger('./logs.csv', separator=';', append=True)
]
model.fit(train_generator,
          epochs=50,
          verbose=1,
          callbacks=keras_callbacks,
          validation_data=val_generator)

11、ProgbarLogger

会把评估以标准输出打印的回调函数。

count_mode: "steps" 或者 "samples"。 进度条是否应该计数看见的样本或步骤(批量)。

stateful_metrics: 可重复使用不应在一个 epoch 上平均的指标的字符串名称。 此列表中的度量标准将按原样记录在 on_epoch_end 中。 所有其他指标将在 on_epoch_end 中取平均值。

keras_callbacks = [
      ProgbarLogger(count_mode='samples')
]
model.fit(train_generator,
          epochs=50,
          verbose=1,
          callbacks=keras_callbacks,
          validation_data=val_generator)

六、实验性回调BackupAndRestore

当您训练神经网络时,尤其是在分布式环境中,如果您的训练过程突然停止(例如由于机器故障),将会出现问题。到目前为止通过的每个迭代都将消失。通过实验性BackupAndRestore回调,您可以指示 Keras 在每个 epoch 之后创建临时检查点文件,您可以稍后恢复到这些文件。

BackupAndRestore callback 旨在通过在每个 epoch 结束时将训练状态备份到临时检查点文件(基于 TF CheckpointManager)中,从 model.fit 执行过程中发生的中断中恢复。

backup_dir属性指示应在其中创建检查点的文件夹。

keras_callbacks = [
       BackupAndRestore('./checkpoints')
]
model.fit(train_generator,
          epochs=50,
          verbose=1,
          callbacks=keras_callbacks,
          validation_data=val_generator)

七、使用 Base Callback 创建自己的回调

有时,默认值或lambda回调都不能提供您需要的功能。在这些情况下,您可以使用 Base 回调类创建自己的回调tensorflow.keras.callbacks.Callback。创建一个非常简单:您定义一个class,创建相关定义(您可以从on_epoch_begin、on_epoch_end、on_batch_begin、on_batch_end等中选择),on_train_begin然后on_train_end将回调添加到您的回调列表中。

class OwnCallback(tensorflow.keras.callbacks.Callback):
    def on_train_begin(self, logs=None):
        print('Training is now beginning!')

keras_callbacks = [
       OwnCallback()
]
model.fit(train_generator,
          epochs=50,
          verbose=1,
          callbacks=keras_callbacks,
          validation_data=val_generator)

Original: https://blog.csdn.net/bashendixie5/article/details/124207898
Author: 坐望云起
Title: 机器学习笔记 - Keras中的回调函数Callback使用教程



相关阅读1

Title: 微信接口API

微信AI接口由微信智聆语音团队、微信翻译团队与公众平台联合推出的AI开放接口,首期开放语音转文字、文本翻译接口,为开发者AI赋能。

语音转文字接口

提供中文普通话、英文语音转文字服务。

文本翻译接口

提供英汉、汉英文本翻译服务。

公众号、小程序以及微信开放平台注册的APP。

微信语音转文字

微信翻译

微信面对面翻译小程序

接口调用请求说明

http&#x8BF7;&#x6C42;&#x65B9;&#x5F0F;:&#xA0;POST
http://api.weixin.qq.com/cgi-bin/media/voice/addvoicetorecofortext?access_token=ACCESS_TOKEN&format=&voice_id=xxxxxx&lang=zh_CN

参数说明

参数是否必须说明access_token是接口调用凭证format是文件格式 (只支持mp3,16k,单声道,最大1M)voice_id是语音唯一标识lang否语言,zh_CN 或 en_US,默认中文语音内容放body里或者上传文件的形式

返回说明

正确调用后的返回示例:

{"errmsg":"ok","errcode":"0"}

接口调用请求说明

http&#x8BF7;&#x6C42;&#x65B9;&#x5F0F;:&#xA0;POST
http://api.weixin.qq.com/cgi-bin/media/voice/queryrecoresultfortext?access_token=ACCESS_TOKEN&voice_id=xxxxxx&lang=zh_CN

请注意,添加完文件之后10s内调用这个接口

参数说明

参数是否必须说明access_token是接口调用凭证voice_id是语音唯一标识lang否语言,zh_CN 或 en_US,默认中文

返回说明

正确调用后的返回示例:

{"result":"xxxxxxxxxxxxxxxxxx&#x201D;}

接口调用请求说明

http&#x8BF7;&#x6C42;&#x65B9;&#x5F0F;:&#xA0;POST
http://api.weixin.qq.com/cgi-bin/media/voice/translatecontent?access_token=ACCESS_TOKEN&lfrom=xxx<o=xxx

参数说明

参数是否必须说明access_token是接口调用凭证lfrom是源语言,zh_CN 或 en_USlto是目标语言,zh_CN 或 en_US源内容放body里或者上传文件的形式(utf8格式,最大600Byte)

返回说明

正确调用后的返回示例:

{"from_content":"xxxxxxxx", "to_content":"xxxxxxxx"}

Original: https://blog.csdn.net/q2243088760/article/details/123554620
Author: ipad协议源码
Title: 微信接口API

相关阅读2

Title: 在M1的Mac上安装Tensorflow(避坑版)

由于架构和各种各样的错误,花了我五六个小时,终于在M1上安装好了Tensorflow!!!

一、python

首先电脑上需要一个python,版本需要在3.8以上。在终端中输入python可以查看版本

机器学习笔记 – Keras中的回调函数Callback使用教程 二、conda

由于苹果不支持x86架构的anaconda,我们需要下载ARM版的miniforge3,用法和anaconda是一样的。在此处下载ARM版的Miniforge3

机器学习笔记 – Keras中的回调函数Callback使用教程

下载完成后用终端进入下载目录,运行一下命令:

bash Miniforge3-MacOSX-arm64.sh

这样miniforge3就安装好了。可以在zshrc中查看环境变量,输入一下命令:

vim ~/.zshrc

可以看到配置文件中有一段

机器学习笔记 – Keras中的回调函数Callback使用教程

输入冒号":",再输入q!退出。

三、在虚拟环境中安装ML Compute版的TensorFlow

我们需要在下载一个environment.yml文件。

下载完成后我们需要记住这个yml文件的路径,然后在终端中输入以下命令创建虚拟环境,我暂且将虚拟环境命名为tf:

conda env create --file=PATH_TO_ENVIRONMENT.YML --name=tf

用你的yml文件的路径替换里面的大写字母。小tips:直接将文件拖入终端即可显示文件路径。

然后在终端中激活我们刚刚创建的虚拟环境:

conda activate tf

然后开始安装依赖,在终端中输入:

pip install --upgrade --force --no-dependencies https://github.com/apple/tensorflow_macos/releases/download/v0.1alpha3/tensorflow_addons_macos-0.1a3-cp38-cp38-macosx_11_0_arm64.whl https://github.com/apple/tensorflow_macos/releases/download/v0.1alpha3/tensorflow_macos-0.1a3-cp38-cp38-macosx_11_0_arm64.whl

然后就开始安装了。

机器学习笔记 – Keras中的回调函数Callback使用教程我们输入python和import tensorflow试试看

机器学习笔记 – Keras中的回调函数Callback使用教程

没有报错,说明安装成功!!!

四、测试Tensorflow代码

用VS Code测试,进入项目目录,编辑如下代码:

import tensorflow as tf
import time

mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

start = time.time()

model.fit(x_train, y_train, epochs=5)

end = time.time()

model.evaluate(x_test, y_test)
print(end - start)

记得在让python解释器在tf环境中

机器学习笔记 – Keras中的回调函数Callback使用教程

然后运行

机器学习笔记 – Keras中的回调函数Callback使用教程

五、一些问题

我在安装过程中使用过别的方法,曾遇到两个问题,一个是xxx .whl is not a supported wheel on this platform.还有一个是用别的方法安装好了tensorflow后提示 zsh:illeagal instruction

如果你也遇到了和我一样的问题,我个人理解是miniforge3的原因,我之前是用brew安装的miniforge3,后来我用brew把它卸载了,用的是github上面的安装包安装的miniforge3之后,再进行下面步骤,就安装上了。我在谷歌上看了很久,也有很多人遇到这样得到问题,不知道他们是不是因为这个原因。​​​​​​​

Original: https://blog.csdn.net/hsywatchingu/article/details/118055508
Author: hsywatchingu
Title: 在M1的Mac上安装Tensorflow(避坑版)

相关阅读3

Title: 海康网络摄像机与电脑交互,有网络和无网络两种方式读取URL视频流,以及无网络情况下配置IP地址

目录

(1)准备工具:

(2)通过WiFi的接口连接

(3)无网络情况下进行交互

(4)海康官方软件

(5)RTSP视频流

a)RTSP:

b)视频流:

c)rtsp流地址

(1)准备工具:

  • 电脑(台式或笔记本)
  • 网线(普通网线即可)
  • POE海康网络摄像机(不需要电源线)
  • 非POE海康网络摄像机(需要电源线)

POE名词解释:

  1. POE也被称为基于局域网的供电系统(POL, Power over LAN )或有源以太网( Active Ethernet),有时也被简称为以太网供电,这是利用现存标准以太网传输电缆的同时传送数据和电功率的最新标准规范,并保持了与现存以太网系统和用户的兼容性;
  2. POE的一种供电方案——POE标准为使用以太网的传输电缆输送直流电到POE兼容的设备定义方法:一种称作"中间跨接法"( Mid -Span ),使用以太网电缆中没有被使用的空闲线对来传输直流电,相应的 Endpoint PSE(端点供电设备)支持POE功能的以太网交换机、路由器、集线器或其他网络交换设备;

注:POE网络摄像机,又称以太网供电网络摄像机,属于监控摄像机的一种。大概的意思是:POE网络摄像机可以通过交换机或录像机给自己供电,而非POE网络摄像机必须得接入电源线。

(2)通过WiFi的接口连接

  • 确保WiFi网络正常,并且电脑连接无线网
  • 摄像机通过网线连接路由器, 确保摄像机和电脑在一个局域网内
  • 最后直接在网页上输入摄像机IP地址即可(如果读取不到画面,换成IE浏览器)
  • 也可以通过海康官网的软件读取摄像机的视频流

机器学习笔记 – Keras中的回调函数Callback使用教程

机器学习笔记 – Keras中的回调函数Callback使用教程

机器学习笔记 – Keras中的回调函数Callback使用教程

(3)无网络情况下进行交互

  • 摄像机通过网线与电脑的网线接口连接(POE和非POE摄像机都需要接入电源线)
  • 配置电脑接入网线的以太网IP地址: 控制面板---网络和共享中心---更改适配器设置---以太网(关闭WALN)---右键属性---Internet协议版本4---配置IP地址
  • 最后直接在网页上输入摄像机IP地址即可(如果读取不到画面,换成IE浏览器)
  • 也可以通过海康官网的软件读取摄像机的视频流

注意:IP网络号必须和摄像头的网络号相同,但是地址号必须不同,否则两个主机不能做交互!

机器学习笔记 – Keras中的回调函数Callback使用教程

(4)海康官方软件

海康官网桌面应用软件下载通道:桌面应用软件 - 下载中心 - 海康威视Hikvision

  1. 工具软件(Hikvision Tools):通过网络查看局域网内的摄像机的信息。
  2. 海康播放器:可以读取URL,即摄像机的视频流;同VLC媒体播放器异曲同工,但是VLC更加强大。

机器学习笔记 – Keras中的回调函数Callback使用教程

机器学习笔记 – Keras中的回调函数Callback使用教程

(5)RTSP视频流

a)RTSP:

  • 实时流传输协议(Real Time Streaming Protocol )
  • 该协议定义了 一对多应用程序如何有效地通过IP 网络传送多媒体数据。
  • HTTP与RTSP 相比,HTTP 请求由客户机发出,服务器作出响应;使用RTSP 时, 客户机和服务器都可以发出请求,即RTSP 可以是双向的。
  • RTSP是用来控制声音或影像的 多媒体串流协议,并允许同时多个串流需求控制,传输时所用的网络通讯协定并不在其定义的范围内,服务器端可以自行选择使用TCP 或UDP 来传送串流内容,它的语法和运作跟HTTP 1.1 类似,但并不特别强调时间同步,所以 比较能容忍网络延迟

b)视频流:

  • 视频流是指 视频数据的传输,例如,它能够被作为一个稳定的和连续的流通过网络处理。因为流动,客户机浏览器或插件能够在整个文件被传输完成前显示多媒体数据。视频流技术基于2 密钥技术, 视频译码技术和可升级的视频分发技术发展。
  • 视频译码技术 包含空间 ( 图片内 ) 预测及 / 或时间 ( 图片间 ) 预测以减少或移除视频序列中固有的冗余。 对于基于块的视频译码,可将视频切片(例如,视频帧或视频帧的一部分)分割成 视频块(其也可被称作树型块)、译码单元(CU)及/或译码节点。
  • 现在的视频编码都是 基于块进行的,将一帧视频划分成不同的块,然后对每个块再分别进行编码处理。CTU-CU-PU-TU。

c)rtsp流地址

海康威视默认IP 地址:192.168.1.64/DHCP

用户名admin, 初始密码一般是12345

端口:"HTTP 端口"(默认为80)、 " RTSP 端口"(默认为554)、" HTTPS 端 口"(默认443)和" 服务端口"(默认8000), ONVIF 端口80 。

rtsp://[username]:

输入密码查看隐藏内容

@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream

  • username: 用户名。例如admin 。
  • password:密码。例如12345 。
  • ip:为设备IP 。例如192.0.0.64 。
  • port: 端口号默认为554 ,若为默认可不填写。
  • codec:视频格式有h264 、MPEG-4 、mpeg4等。
  • channel: 通道号,起始为1 。例如通道1 ,则为ch1 。
  • subtype: 码流类型,主码流为main ,子码流为sub 。

主码流:rtsp://admin:12345@192.168.1.64/h264/ch1/main/av_stream

子码流:rtsp://admin:12345@192.168.1.64/mpeg4/ch1/sub/av_stream

主码流比子码流更加清晰,在摄像机监控界面可以相互切换。

Original: https://blog.csdn.net/qq_54185421/article/details/125514771
Author: Flying Bulldog
Title: 海康网络摄像机与电脑交互,有网络和无网络两种方式读取URL视频流,以及无网络情况下配置IP地址