七牛云:开启智能音视频新征程,引领行业无限可能

在数字化浪潮汹涌澎湃的今天,音视频技术已经成为众多行业发展的关键驱动力。无论是企业想要高效开展线上培训、营销活动,还是社交娱乐平台追求更丰富的用户体验,亦或是智能新媒体探索创新的内容呈现方式,七牛云一站式场景化智能音视频 APaaS 都是理想之选,现在点击推广链接即可深入了解!

七牛云的实力不容小觑。服务着百万级的企业客户与开发者,EB 级的音视频数据存储规模展现出其强大的存储能力。每日数亿分钟的直播和实时互动,以及超万亿的公有云管理文件数,足以证明其在音视频领域的广泛应用和卓越表现。并且,七牛云智能接入全参 DeepSeek – R1,还支持私有化部署,现在限时领取 1000 元算力金,就能解锁满血 GPU 云服务,这为企业提供了更具性价比和定制化的选择。

七牛云提供全方位的解决方案,覆盖多个重要领域。在视频营销方面,它涵盖营销、带货、企业培训、活动直播等场景,助力企业轻松实现内容生产、直播数据与流量的闭环。想象一下,企业举办线上营销活动时,通过七牛云快速集成和接入直播服务,吸引大量潜在客户,同时利用直播数据优化后续营销策略,让营销效果事半功倍。社交娱乐领域,七牛云为移动社交娱乐平台提供一站式服务,从图片处理到音视频的点播、直播、互动,再到存储与分发,一应俱全。短视频平台可以借助七牛云的断点拍摄、分段文字特效等功能,打造更具创意和吸引力的视频内容,满足用户日益增长的娱乐需求。

视联网领域,七牛云提供从音视频云管理到场景感知分析等一系列服务。在家居视联网中,用户可以通过智能设备实现便捷的视频通话和家居监控;智慧幼教场景下,老师和家长能够实时了解孩子在园情况,保障孩子的成长。智能新媒体方面,七牛云兼顾低延时、高吞吐、高精度,为平台提供优质的音视频内容制作服务,助力新媒体在激烈的市场竞争中脱颖而出。而在充满潜力的元宇宙领域,七牛云提供虚拟数字人、虚拟空间音视频服务,助力元宇宙企业技术及应用落地,打造沉浸式虚拟空间,为用户带来前所未有的体验。

搭建场景应用也变得轻松简单,七牛云的一站式场景化音视频低代码工厂功不可没。即使没有深厚的技术背景,也能通过创建项目、选择模版和插件、自定义扩展等简单几步,快速搭建专属的音视频应用。其低门槛接入、可扩展性强、全场景支持的特点,让企业能够以更低成本和更高效率实现音视频应用的搭建和部署。同时,提供的各种音视频能力 SDK 和可视化方案配置,大幅降低了开发难度。

七牛云完备的一站式视频能力覆盖音视频生产、处理、传输、消费全流程。直播方面,拥有强大的全球化实时流网络和完善的客户端与云端服务,还能无缝切换低延时直播;点播功能集视频采集、编辑、上传等多种功能于一体,全站加速确保服务稳定,多种转码模板适配不同网络环境;实时音视频支持多种场景,自研 RTC 端到端延迟小于 200ms,还能支持万人规模的超大房间;摄像头智能分析实现直播、录制等功能一体化,配合智能多媒体服务及智能识别技术,满足多样化需求。

众多成功案例见证了七牛云的强大实力。指纹科技借助七牛云企业直播解决方案,构建了高效的直播培训平台,赋能跨境电商发展;快看漫画使用七牛短视频 SDK,获得了丰富的短视频制作功能,优化了用户体验;芒果 TV 通过七牛云一站式互动直播解决方案,创新了用户互动模式,重塑了内容生态。还有新致软件、第一昆山、享道出行、石墨文档等企业,都在七牛云的助力下取得了显著成果。

不仅如此,七牛云还提供 7×24 小时技术服务和客户全流程服务,为企业在使用过程中遇到的问题提供及时有效的支持。并且,七牛云获得了多项权威认证,如 ISO 20000、ISO 9001、ISO 27001、ISO 27701、CMMi3、可信云服务认证等,这充分证明了其产品和服务的质量与安全性。

不要再犹豫,选择七牛云,就是选择更高效、更优质、更具创新性的音视频解决方案。点击推广链接,开启你的智能音视频之旅,在数字化时代抢占先机,实现无限可能!

提取字符串中的数字

高一11班,从这个字符串的提取出数字11,可以使用以下公式

=REPLACE(REPLACE(D5,1,2,””),3,1,””)

高一1班,从这个字符串的提取出数字1,可以使用以下公式

=REPLACE(REPLACE(D4,1,2,””),2,1,””)

在原文件名前加上前缀并实现文件的批量重命名

要在原文件名前加上前缀并实现文件的批量重命名,你可以根据你所使用的操作系统选择合适的脚本语言来编写脚本。以下是在不同操作系统上实现这一功能的示例:

在 Windows 上使用 PowerShell

# 设置文件夹路径
$folderPath = "C:\path\to\your\folder"

# 设置前缀
$prefix = "prefix_"

# 获取文件夹中的所有文件
$files = Get-ChildItem -Path $folderPath

# 遍历并重命名每个文件
foreach ($file in $files) {
    # 构造新的文件名
    $newName = $prefix + $file.Name
    # 重命名文件
    Rename-Item -Path $file.FullName -NewName (Join-Path $folderPath $newName)
}

在 macOS/Linux 上使用 Shell 脚本

#!/bin/bash

# 设置文件夹路径
folder_path="/path/to/your/folder"

# 设置前缀
prefix="prefix_"

# 进入文件夹
cd "$folder_path"

# 遍历并重命名每个文件
for file in *; do
  if [ -f "$file" ]; then
    new_name="${prefix}${file}"
    mv "$file" "$new_name"
  fi
done

在 Python 中使用 os 模块

import os

# 设置文件夹路径
folder_path = '/path/to/your/folder'

# 设置前缀
prefix = 'prefix_'

# 获取文件夹中的所有文件
files = os.listdir(folder_path)

# 遍历并重命名每个文件
for file_name in files:
    if os.path.isfile(os.path.join(folder_path, file_name)):
        new_name = prefix + file_name
        os.rename(os.path.join(folder_path, file_name), os.path.join(folder_path, new_name))

注意事项

  1. 确保你有权限:在重命名文件之前,确保你有足够的权限来修改文件名。
  2. 避免命名冲突:如果添加前缀后可能导致文件名冲突(例如,原文件中已经存在以该前缀开头的文件),你需要考虑如何处理这种情况,比如检查新文件名是否已存在,或者添加额外的序号来避免冲突。
  3. 测试脚本:在正式运行脚本之前,最好在一个包含少量测试文件的文件夹中测试脚本,以确保它按预期工作。

将上述脚本中的 folder_path 或 $folderPath 替换为你的文件夹路径,将 prefix 替换为你想要添加的前缀,然后运行脚本即可。

推荐一个 GitHub 的开源电子书仓库,值得收藏

1 C 语言

2 C++

3 Java

4 Python

5 Go

6 数据结构与算法

7 计算机系统知识

8 计算机网路

9 操作系统

10 Linux

11 汇编语言

12 数据库

13 设计模式

14 前端

FTP上传文件,提示553 Can’t open that file: Permission denied

原因:

目录的所属组,所属用户属于root, 导致FTP无法上传, 修改组和所属用户为www即可

chgrp -fR www ./*
chown -fR www ./*

连接不到 ftp  了 查看了很多原因 最后 更改文件夹权限 就可以了 更改为root然后就正常连接到了 或者更改文件夹权限 就可以正常使用了

一键转换LaTex公式,这款开源公式识别神器比Mathpix Snip更适合你

只需要把公式图片用鼠标拖动到工具内,就能一键转成 LaTex 公式。

写论文、做研究时,最让你头疼的是什么?想必公式编辑会榜上有名。那么有没有便捷的方法进行公式编辑呢?这里推荐一款神器,它使用 PyTorch Lightning 可将 LaTeX 数学方程的图像映射到 LaTeX 代码。

它的效果是这样的,输入一张带公式的图片,它能转换成 LaTeX 代码形式:

而它的名字也是很直接的,就叫做「Image to LaTex Converter」,把产品功能写在了明面上。

项目地址:https://github.com/kingyiusuen/image-to-latex

此前,很多人都在用 Mathpix Snip,这个工具虽然好用,但是只能提供 50 次免费转换。之后,一位中国开发者也创建了一款类似工具「Image2LaTeX」,用户输入公式截图即可以自动将其对应的 LaTex 文本转换出来。效果也虽好,不过也只是提供了 1000 次从文档中提取公式的能力。

此次项目的创建者为明尼苏达大学双城分校计量心理学博士生 King Yiu Suen,他本科毕业于香港中文大学,致力于研究评估心理测试和教育评估的统计学方法,以及测试响应数据的建模。

该项目为何能够一键转换成 LaTex 公式?这要都得益于背后使用的数据集和模型。

项目背后的数据集与模型

作者也对打造过程进行了详细的介绍。2016 年,在 Yuntian Deng 等作者合著的一篇 OCR 主题论文《What You Get Is What You See: A Visual Markup Decompiler》中,他们介绍了叫做「im2latex-100K」的模型(原始版本和预处理版本),这是一个由大约 100K LaTeX 数学方程图像组成的数据集。

作者使用该数据集训练了一个模型,使用 ResNet-18 作为具有 2D 位置编码的编码器,使用 Transformer 作为具有交叉熵损失的解码器。这个过程类似于《Full Page Handwriting Recognition via Image to Sequence Extraction》Singh et al. (2021) 中描述的方法,不过作者只使用 ResNet up to block 3 来降低计算成本,并且去掉了行号编码,因为它不适用于这个问题。

Singh et al. (2021)论文中的系统架构。

最初,作者使用预处理数据集来训练模型,因为预处理图像被下采样到原始大小的一半以提高效率,而且分组并填充为相似的大小以方便批处理。但结果表明,这种严格的预处理被证明是一个巨大的限制。尽管该模型可以在测试集(其预处理方式与训练集相同)上取得合格的性能,但它并不能很好地泛化到数据集之外的图像,这很可能是因为其他图像质量、填充和字体大小与数据集中的图像不同。

使用相同数据集尝试解决相同问题的其他人也发现了这种现象。下图这位开发者试图从论文中裁剪图像,图像与数据集中的图像大小相似。但即使对于简单的公式,输出也会完全失败:

为此,作者使用了原始数据集并在数据处理 pipeline 中包含了图像增强(例如随机缩放、高斯噪声)以增加样本的多样性。此外,作者没有按大小对图像进行分组,而是进行了均匀采样并将它们填充为批次中最大图像的大小,以便模型必须学习如何适应不同的填充大小。

作者在使用数据集中遇到的其他问题包括:

  • 一些 LaTex 代码生成了视觉上相同的输出,比如 left(和  right),看起来与 (和)) 一样,因此做了规范化处理;
  • 一些 LaTex 代码用来添加空间,比如  vspace{2px}和  hspace{0.3mm})。但是,间距对于人类来说也很难判断。此外,表述相同间距有很多方法,比如 1 cm = 10 mm。最后,作者比希望模型在空白图像上生成代码,因此删除了这些空白图像。

不过,该项目也有一些可能需要改进的地方:

  • 更好地数据清理(比如删除间距命令)
  • 尽可能多地训练模型(由于时间原因,只训练了 15 个 epoch 的模型,但是验证损失依然下降)
  • 使用集束搜索(只实现了贪婪搜索)
  • 使用更大的模型(比如 ResNet-34 而不是 ResNet-18)
  • 进行一些超参数调优

作者使用的是 Google Colab,计算资源有限,因此并没有做到以上这些。

项目的使用与部署

# 在项目设置方面:首先你需要将该项目克隆到计算机,并将命令行放置到库文件夹中:
 
git clone https://github.com/kingyiusuen/image-to-latex.git
cd image-to-latex
 
# 然后,创建一个名为 venv 的虚拟环境并安装所需的软件包:
 
make venv
make install-dev
 
# 在数据预处理方面:执行如下命令下载 im2latex-100k 数据集并进行所有预处理任务(图像裁剪可能需要一个小时):
 
python scripts/prepare_data.py
 
# 在模型训练方面:启动训练 session 的命令如下:
 
python scripts/run_experiment.py trainer.gpus=1 data.batch_size=32
 
# 你可以在 conf/config.yaml 中修改配置,也可以在命令行中修改。
 
# 在实验跟踪方面:最佳模型 checkpoint 将自动上传到 Weights & Biases (W&B)(在训练开始前你需要先进行注册或登录 W&B )。如下是从 W&B 下载训练模型 checkpoint 的示例命令:
 
python scripts/download_checkpoint.py RUN_PATH
 
# 将 RUN_PATH 替换为运行的路径,运行路径格式为 < entity>/<project>/<run_id>。如果你想查找特定实验运行的运行路径,请转到 dashboard 中的 Overview 选项卡进行查看。
 
# 例如,你可以使用如下命令下载最佳运行:
 
python scripts/download_checkpoint.py kingyiusuen/image-to-latex/1w1abmg1
 
# checkpoint 将被下载到项目目录下一个名为 artifacts 的文件夹中。
 
# 测试和持续集成方面:以下工具可用于 lint 代码库:
 
# isort:对 Python 脚本中的 import 语句进行排序和格式化;
 
# black:遵循 PEP8 的代码格式化程序;
 
# flake8:在 Python 脚本中报告风格问题的代码检查器;
 
# mypy:在 Python 脚本中执行静态类型检查。
 
 
# 使用下面的命令来运行所有的检查和格式化程序:
 
make lint
 
# 在部署方面:训练好的模型通过创建的 API 进行预测,启动和运行服务器命令如下:
 
make api
 
# 要运行 Streamlit 应用程序,请使用以下命令创建一个新的终端窗口:
 
make streamlit
 
# 应用程序应该在浏览器中自动打开,你也可通过 http://localhost:8501 / 进行查看。想让这个应用程序运行,你还需要下载实验运行的工件,启动并运行 API。
 
# 为 API 创建一个 Docker 映像:
 
make docker

使用pdfobject.js实现在线浏览PDF

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>在指定div中浏览PDF</title>
        <!--在此引入bootstrap只为初始化样式div样式-->
        <link rel="stylesheet" href="css/bootstrap.min.css" />
        <style>
            /* 添加样式是为了实现全屏效果 */
            html,body{
                height: 100%;
                overflow: hidden;
            }
            
            #example1{
                height: 100%;
            }
            
            .pdfobject-container{
                /* height: 500px; */
            }
            
            .pdfobject{
                /* border: 1px solid #666; */
            }
        </style>
    </head>
    
    <body>
        <div id="example1"></div>
            
        <script type="text/javascript" src="js/pdfobject.min.js"></script>
        <script>
            // 我的pdf文件放在项目的pdf文件夹下,名字叫做Java.pdf,指定PDF从20页开始阅读
            PDFObject.embed("pdf/Java.pdf", "#example1", {page: "20"});
        </script>
    </body>
</html>

How to embed a PDF without using JavaScript

方式一:

<embed src="/pdf/sample-3pp.pdf#page=2" type="application/pdf" width="100%" height="100%" />

方式二:

<iframe src="/pdf/sample-3pp.pdf#page=2" width="100%" height="100%">
</iframe>

方式三:

<object data="/pdf/sample-3pp.pdf#page=2" type="application/pdf" width="100%" height="100%">
   <b>Example fallback content</b>: This browser does not support PDFs. Please download the PDF to view it: 
   <a href="/pdf/sample-3pp.pdf">Download PDF</a>.
</object>

方式四:

<object data="/pdf/sample-3pp.pdf#page=2" type="application/pdf" width="100%" height="100%">
   <iframe src="/pdf/sample-3pp.pdf#page=2" width="100%" height="100%" style="border: none;">
     This browser does not support PDFs. Please download the PDF to view it: 
     <a href="/pdf/sample-3pp.pdf">Download PDF</a>
   </iframe>
</object>

yii2 checkboxlist使用及数据入库

视图表单部分

<?php $form = \yii\widgets\ActiveForm::begin() ?>
 
<?=$form->field($model,'username')->textInput() ?>
 
<?=$form->field($model,'hobby')->checkboxList(['1'=>'篮球','2'=>'足球','3'=>'游戏','4'=>'读书'])?>
 
 
<?=\yii\helpers\Html::submitButton('保存',['class'=>'btn btn-primary'])?>
 
<?php \yii\widgets\ActiveForm::end()?>

模型部分

public function beforeSave($insert) {
    if($this->hobby) {
        $this->hobby = implode(',',$this->hobby);
 
    }
    return parent::beforeSave($insert); // TODO: Change the autogenerated stub
}
 
public function afterFind() {
    $this->hobby = explode(',',$this->hobby);
    parent::afterFind();
}
yii2.0 的 多选框实现方法

第一种:
ActiveForm::checkboxList();
 优点:可以将全部数据生成多选框,自带验证

$form->field($model, 'username')->checkboxList(ArrayHelper::map($data,'id', 'customer_name'));
第二种:
ActiveForm::checkbox();
 优点:只生成一个多选框,自带验证

$form->field($model, 'username')->checkbox(ArrayHelper::map($data,'id', 'customer_name'));
第三种:
Html::activeCheckbox();

Html::activeCheckbox($model, 'username', ArrayHelper::map($data,'id', 'customer_name'));
第四种:
Html::activeCheckboxList();

Html::activeCheckboxList($model, 'username', ArrayHelper::map($data,'id', 'customer_name'));

实现多选题评分

多选题的给分原则是多选错选不得分,部分选对得部分分

$q_answer = 'A,B,C'; //正确答案

$s_answer = 'A,D';  //学生答案
$q_answer = explode(',',$q_answer);
$s_answer = explode(',',$s_answer);

$count = count($q_answer);

$score = 6;

if(count(array_diff($s_answer,$q_answer)) > 0)
{
      $real_score = 0;
}
else
{
      $real_score = $score * count(array_intersect($q_answer,$s_answer)) / $count;
}
echo $real_score;

运行结果为:0