Table des matières
yii2源码学习笔记(十三),yii2源码学习笔记
Maison développement back-end tutoriel php yii2源码学习笔记(十三),yii2源码学习笔记_PHP教程

yii2源码学习笔记(十三),yii2源码学习笔记_PHP教程

Jul 12, 2016 am 08:51 AM
yii2 principal Treize 学习 实现 模型 源码 笔记

yii2源码学习笔记(十三),yii2源码学习笔记

模型类DynamicModel主要用于实现模型内的数据验证yii2\base\DynamicModel.php

<span>  1</span> <?<span>php
</span><span>  2</span> <span>/*</span><span>*
</span><span>  3</span> <span> * @link </span><span>http://www.yiiframework.com/</span>
<span>  4</span> <span> * @copyright Copyright (c) 2008 Yii Software LLC
</span><span>  5</span> <span> * @license </span><span>http://www.yiiframework.com/license/</span>
<span>  6</span>  <span>*/</span>
<span>  7</span> <span>namespace</span> yii\<span>base</span><span>;
</span><span>  8</span> 
<span>  9</span> <span>use yii\validators\Validator;
</span><span> 10</span> 
<span> 11</span> <span>/*</span><span>*
</span><span> 12</span> <span> * DynamicModel is a model class primarily used to support ad hoc data validation.
</span><span> 13</span> <span> * DynamicModel是一种主要用于支持ad hoc数据验证模型类
</span><span> 14</span> <span> * The typical usage of DynamicModel is as follows,
</span><span> 15</span> <span> *
</span><span> 16</span> <span> * ```php
</span><span> 17</span> <span> * public function actionSearch($name, $email)
</span><span> 18</span> <span> * {
</span><span> 19</span> <span> *     $model = DynamicModel::validateData(compact('name', 'email'), [
</span><span> 20</span> <span> *         [['name', 'email'], 'string', 'max' => 128],
</span><span> 21</span> <span> *         ['email', 'email'],
</span><span> 22</span> <span> *     ]);
</span><span> 23</span> <span> *     if ($model->hasErrors()) {
</span><span> 24</span> <span> *         // validation fails
</span><span> 25</span> <span> *     } else {
</span><span> 26</span> <span> *         // validation succeeds
</span><span> 27</span> <span> *     }
</span><span> 28</span> <span> * }
</span><span> 29</span> <span> * ```
</span><span> 30</span> <span> *
</span><span> 31</span> <span> * The above example shows how to validate `$name` and `$email` with the help of DynamicModel.
</span><span> 32</span> <span> * 上面的例子演示了如何用DynamicModel验证用户名`$name`和邮箱`$email`
</span><span> 33</span> <span> * The [[validateData()]] method creates an instance of DynamicModel, defines the attributes
</span><span> 34</span> <span> * using the given data (`name` and `email` in this example), and then calls [[Model::validate()]].
</span><span> 35</span> <span> * validateData() 方法会创建一个 DynamicModel 的实例对象。通过给定数据定义模型特性,之后调用Model::validate() 方法。
</span><span> 36</span> <span> * You can check the validation result by [[hasErrors()]], like you do with a normal model.
</span><span> 37</span> <span> * You may also access the dynamic attributes defined through the model instance, e.g.,
</span><span> 38</span> <span> * 可以通过[[hasErrors()]]方法获取验证结果
</span><span> 39</span> <span> * `$model->name` and `$model->email`.
</span><span> 40</span> <span> *
</span><span> 41</span> <span> * Alternatively, you may use the following more "classic" syntax to perform ad-hoc data validation:
</span><span> 42</span> <span> *  除此之外,你也可以用如下的更加&ldquo;classic(传统)&rdquo;的语法来执行临时数据验
</span><span> 43</span> <span> * ```php
</span><span> 44</span> <span> * $model = new DynamicModel(compact('name', 'email'));
</span><span> 45</span> <span> * $model->addRule(['name', 'email'], 'string', ['max' => 128])
</span><span> 46</span> <span> *     ->addRule('email', 'email')
</span><span> 47</span> <span> *     ->validate();
</span><span> 48</span> <span> * ```
</span><span> 49</span> <span> *
</span><span> 50</span> <span> * DynamicModel implements the above ad-hoc data validation feature by supporting the so-called
</span><span> 51</span> <span> * "dynamic attributes". It basically allows an attribute to be defined dynamically through its constructor
</span><span> 52</span> <span> * or [[defineAttribute()]].
</span><span> 53</span> <span> * 实现了上述特殊数据模型验证功能支持的&ldquo;动态属性&rdquo;。允许通过它的构造函数或 [[defineAttribute()]]来定义一个属性
</span><span> 54</span> <span> * @author Qiang Xue <qiang.xue@gmail.com>
</span><span> 55</span> <span> * @since 2.0
</span><span> 56</span>  <span>*/</span>
<span> 57</span> <span>class</span><span> DynamicModel extends Model
</span><span> 58</span> <span>{
</span><span> 59</span>     <span>private</span> $_attributes = [];<span>//</span><span>动态模型内动态属性</span>
<span> 60</span> 
<span> 61</span> 
<span> 62</span>     <span>/*</span><span>*
</span><span> 63</span> <span>     * Constructors.构造函数,用于将传入的属性赋值给_attributes,便于使用
</span><span> 64</span> <span>     * @param array $attributes the dynamic attributes (name-value pairs, or names) being defined被定义的动态属性
</span><span> 65</span> <span>     * @param array $config the configuration array to be applied to this object.用于该对象的配置数组。
</span><span> 66</span>      <span>*/</span>
<span> 67</span>     <span>public</span> function __construct(array $attributes = [], $config =<span> [])
</span><span> 68</span> <span>    {
</span><span> 69</span>         <span>foreach</span> ($attributes <span>as</span> $name => $value) {<span>//</span><span>遍历传入的属性</span>
<span> 70</span>             <span>if</span> (is_integer($name)) {<span>//</span><span>如果是整型,说明只传入了属性名,将属性名写入_attributes</span>
<span> 71</span>                 $<span>this</span>->_attributes[$value] = <span>null</span><span>;
</span><span> 72</span>             } <span>else</span><span> {
</span><span> 73</span>                 $<span>this</span>->_attributes[$name] = $value;<span>//</span><span>按键值对的形式写入</span>
<span> 74</span> <span>            }
</span><span> 75</span> <span>        }
</span><span> 76</span>         parent::__construct($config);<span>//</span><span>调用父类的配置</span>
<span> 77</span> <span>    }
</span><span> 78</span> 
<span> 79</span>     <span>/*</span><span>*
</span><span> 80</span> <span>     * @inheritdoc 重写__get方法,从_attributes中取值
</span><span> 81</span>      <span>*/</span>
<span> 82</span>     <span>public</span><span> function __get($name)
</span><span> 83</span> <span>    {
</span><span> 84</span>         <span>if</span> (array_key_exists($name, $<span>this</span>-><span>_attributes)) {
</span><span> 85</span>             <span>//</span><span>如果传入的$name在数组_attributes中存在,则从_attributes中取值</span>
<span> 86</span>             <span>return</span> $<span>this</span>-><span>_attributes[$name];
</span><span> 87</span>         } <span>else</span> {<span>//</span><span>否则调用父类的__get方法取属性值</span>
<span> 88</span>             <span>return</span><span> parent::__get($name);
</span><span> 89</span> <span>        }
</span><span> 90</span> <span>    }
</span><span> 91</span> 
<span> 92</span>     <span>/*</span><span>*
</span><span> 93</span> <span>     * @inheritdoc 重写__set方法,给_attributes设置值
</span><span> 94</span>      <span>*/</span>
<span> 95</span>     <span>public</span><span> function __set($name, $value)
</span><span> 96</span> <span>    {
</span><span> 97</span>         <span>if</span> (array_key_exists($name, $<span>this</span>-><span>_attributes)) {
</span><span> 98</span>             <span>//</span><span>如果传入的$name在数组_attributes中存在,则将动态属性$name的值设置为$value</span>
<span> 99</span>             $<span>this</span>->_attributes[$name] =<span> $value;
</span><span>100</span>         } <span>else</span><span> {
</span><span>101</span>             parent::__set($name, $value);<span>//</span><span>调用父类的__set方法设置属性值</span>
<span>102</span> <span>        }
</span><span>103</span> <span>    }
</span><span>104</span> 
<span>105</span>     <span>/*</span><span>*
</span><span>106</span> <span>     * @inheritdoc 同上 重写__isset方法,判断_attributes中是否设置$name值
</span><span>107</span>      <span>*/</span>
<span>108</span>     <span>public</span><span> function __isset($name)
</span><span>109</span> <span>    {
</span><span>110</span>         <span>if</span> (array_key_exists($name, $<span>this</span>-><span>_attributes)) {
</span><span>111</span>             <span>return</span> isset($<span>this</span>-><span>_attributes[$name]);
</span><span>112</span>         } <span>else</span><span> {
</span><span>113</span>             <span>return</span><span> parent::__isset($name);
</span><span>114</span> <span>        }
</span><span>115</span> <span>    }
</span><span>116</span> 
<span>117</span>     <span>/*</span><span>*
</span><span>118</span> <span>     * @inheritdoc 同上,重写__unset方法,删除_attributes中的$name属性值
</span><span>119</span>      <span>*/</span>
<span>120</span>     <span>public</span><span> function __unset($name)
</span><span>121</span> <span>    {
</span><span>122</span>         <span>if</span> (array_key_exists($name, $<span>this</span>-><span>_attributes)) {
</span><span>123</span>             unset($<span>this</span>-><span>_attributes[$name]);
</span><span>124</span>         } <span>else</span><span> {
</span><span>125</span> <span>            parent::__unset($name);
</span><span>126</span> <span>        }
</span><span>127</span> <span>    }
</span><span>128</span> 
<span>129</span>     <span>/*</span><span>*
</span><span>130</span> <span>     * Defines an attribute. 定义动态属性的方法
</span><span>131</span> <span>     * @param string $name the attribute name   属性名
</span><span>132</span> <span>     * @param mixed $value the attribute value  属性值
</span><span>133</span>      <span>*/</span>
<span>134</span>     <span>public</span> function defineAttribute($name, $value = <span>null</span><span>)
</span><span>135</span> <span>    {
</span><span>136</span>         $<span>this</span>->_attributes[$name] =<span> $value;
</span><span>137</span> <span>    }
</span><span>138</span> 
<span>139</span>     <span>/*</span><span>*
</span><span>140</span> <span>     * Undefines an attribute. 用于删除动态属性的方法
</span><span>141</span> <span>     * @param string $name the attribute name 属性名
</span><span>142</span>      <span>*/</span>
<span>143</span>     <span>public</span><span> function undefineAttribute($name)
</span><span>144</span> <span>    {
</span><span>145</span>         unset($<span>this</span>-><span>_attributes[$name]);
</span><span>146</span> <span>    }
</span><span>147</span> 
<span>148</span>     <span>/*</span><span>*
</span><span>149</span> <span>     * Adds a validation rule to this model.    添加验证规则
</span><span>150</span> <span>     * You can also directly manipulate [[validators]] to add or remove validation rules.
</span><span>151</span> <span>     * This method provides a shortcut.
</span><span>152</span> <span>     * 可以直接调用[[validators]]来添加或者删除验证规则,本方法提供了一个短方法
</span><span>153</span> <span>     * @param string|array $attributes the attribute(s) to be validated by the rule 进行验证的属性
</span><span>154</span> <span>     * @param mixed $validator the validator for the rule.This can be a built-in validator name,
</span><span>155</span> <span>     * a method name of the model class, an anonymous function, or a validator class name.
</span><span>156</span> <span>     * 规则的验证。这是一个内置验证器的名字, 一个模型类的方法名,一个匿名函数或一个验证器类的名称。
</span><span>157</span> <span>     * @param array $options the options (name-value pairs) to be applied to the validator
</span><span>158</span> <span>     *  (name-value)被应用到验证器
</span><span>159</span> <span>     * @return static the model itself  模型本身
</span><span>160</span>      <span>*/</span>
<span>161</span>     <span>public</span> function addRule($attributes, $validator, $options =<span> [])
</span><span>162</span> <span>    {
</span><span>163</span>         $validators = $<span>this</span>->getValidators();<span>//</span><span>所有的验证规则对象
</span><span>164</span>         <span>//</span><span>生成Validator对象,并且插入 $validators中</span>
<span>165</span>         $validators->append(Validator::createValidator($validator, $<span>this</span><span>, (array) $attributes, $options));
</span><span>166</span> 
<span>167</span>         <span>return</span> $<span>this</span><span>;
</span><span>168</span> <span>    }
</span><span>169</span> 
<span>170</span>     <span>/*</span><span>*
</span><span>171</span> <span>     * Validates the given data with the specified validation rules.通过指定的规则验证给定的数据
</span><span>172</span> <span>     * This method will create a DynamicModel instance, populate it with the data to be validated,
</span><span>173</span> <span>     * create the specified validation rules, and then validate the data using these rules.
</span><span>174</span> <span>     * @param array $data the data (name-value pairs) to be validated
</span><span>175</span> <span>     * @param array $rules the validation rules. Please refer to [[Model::rules()]] on the format of this parameter.
</span><span>176</span> <span>     * @return static the model instance that contains the data being validated
</span><span>177</span> <span>     * @throws InvalidConfigException if a validation rule is not specified correctly.
</span><span>178</span>      <span>*/</span>
<span>179</span>     <span>public</span> <span>static</span> function validateData(array $data, $rules =<span> [])
</span><span>180</span> <span>    {
</span><span>181</span>         <span>/*</span><span> @var $model DynamicModel </span><span>*/</span>
<span>182</span>         $model = <span>new</span> <span>static</span>($data);<span>//</span><span>实例化调用类,将$data赋值给_attributes</span>
<span>183</span>         <span>if</span> (!<span>empty($rules)) {
</span><span>184</span>             $validators = $model->getValidators();<span>//</span><span>获取所有定义的验证规则</span>
<span>185</span>             <span>foreach</span> ($rules <span>as</span><span> $rule) {
</span><span>186</span>                 <span>if</span><span> ($rule instanceof Validator) {
</span><span>187</span>                     $validators->append($rule);<span>//</span><span>如果$rule是Validator的实例,则添加到$validators中</span>
<span>188</span>                 } elseif (is_array($rule) && isset($rule[<span>0</span>], $rule[<span>1</span>])) { <span>//</span><span> attributes, validator type
</span><span>189</span>                      <span>//</span><span>如果$rule是数组,则判断动态属性和验证类型是否存在,创建Validator对象,添加到$validators中</span>
<span>190</span>                     $validator = Validator::createValidator($rule[<span>1</span>], $model, (array) $rule[<span>0</span>], array_slice($rule, <span>2</span><span>));
</span><span>191</span>                     $validators-><span>append($validator);
</span><span>192</span>                 } <span>else</span> {<span>//</span><span>抛出异常</span>
<span>193</span>                     <span>throw</span> <span>new</span> InvalidConfigException(<span>'</span><span>Invalid validation rule: a rule must specify both attribute names and validator type.</span><span>'</span><span>);
</span><span>194</span> <span>                }
</span><span>195</span> <span>            }
</span><span>196</span> <span>        }
</span><span>197</span> 
<span>198</span>         $model->validate();<span>//</span><span>执行验证</span>
<span>199</span> 
<span>200</span>         <span>return</span><span> $model;
</span><span>201</span> <span>    }
</span><span>202</span> 
<span>203</span>     <span>/*</span><span>*
</span><span>204</span> <span>     * @inheritdoc  返回所有的动态属性
</span><span>205</span>      <span>*/</span>
<span>206</span>     <span>public</span><span> function attributes()
</span><span>207</span> <span>    {
</span><span>208</span>         <span>return</span> array_keys($<span>this</span>-><span>_attributes);
</span><span>209</span> <span>    }
</span><span>210</span> }
Copier après la connexion

 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1132201.htmlTechArticleyii2源码学习笔记(十三),yii2源码学习笔记 模型类DynamicModel主要用于实现模型内的数据验证yii2\base\DynamicModel.php 1 ? php 2 /* * 3 * @link http://...
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Le modèle MoE open source le plus puissant au monde est ici, avec des capacités chinoises comparables à celles du GPT-4, et le prix ne représente que près d'un pour cent de celui du GPT-4-Turbo. Le modèle MoE open source le plus puissant au monde est ici, avec des capacités chinoises comparables à celles du GPT-4, et le prix ne représente que près d'un pour cent de celui du GPT-4-Turbo. May 07, 2024 pm 04:13 PM

Imaginez un modèle d'intelligence artificielle qui non seulement a la capacité de surpasser l'informatique traditionnelle, mais qui permet également d'obtenir des performances plus efficaces à moindre coût. Ce n'est pas de la science-fiction, DeepSeek-V2[1], le modèle MoE open source le plus puissant au monde est ici. DeepSeek-V2 est un puissant mélange de modèle de langage d'experts (MoE) présentant les caractéristiques d'une formation économique et d'une inférence efficace. Il est constitué de 236B paramètres, dont 21B servent à activer chaque marqueur. Par rapport à DeepSeek67B, DeepSeek-V2 offre des performances plus élevées, tout en économisant 42,5 % des coûts de formation, en réduisant le cache KV de 93,3 % et en augmentant le débit de génération maximal à 5,76 fois. DeepSeek est une entreprise explorant l'intelligence artificielle générale

L'IA bouleverse la recherche mathématique ! Le lauréat de la médaille Fields et mathématicien sino-américain a dirigé 11 articles les mieux classés | Aimé par Terence Tao L'IA bouleverse la recherche mathématique ! Le lauréat de la médaille Fields et mathématicien sino-américain a dirigé 11 articles les mieux classés | Aimé par Terence Tao Apr 09, 2024 am 11:52 AM

L’IA change effectivement les mathématiques. Récemment, Tao Zhexuan, qui a prêté une attention particulière à cette question, a transmis le dernier numéro du « Bulletin de l'American Mathematical Society » (Bulletin de l'American Mathematical Society). En se concentrant sur le thème « Les machines changeront-elles les mathématiques ? », de nombreux mathématiciens ont exprimé leurs opinions. L'ensemble du processus a été plein d'étincelles, intense et passionnant. L'auteur dispose d'une équipe solide, comprenant Akshay Venkatesh, lauréat de la médaille Fields, le mathématicien chinois Zheng Lejun, l'informaticien de l'Université de New York Ernest Davis et de nombreux autres universitaires bien connus du secteur. Le monde de l’IA a radicalement changé. Vous savez, bon nombre de ces articles ont été soumis il y a un an.

Google est ravi : les performances de JAX surpassent Pytorch et TensorFlow ! Cela pourrait devenir le choix le plus rapide pour la formation à l'inférence GPU Google est ravi : les performances de JAX surpassent Pytorch et TensorFlow ! Cela pourrait devenir le choix le plus rapide pour la formation à l'inférence GPU Apr 01, 2024 pm 07:46 PM

Les performances de JAX, promu par Google, ont dépassé celles de Pytorch et TensorFlow lors de récents tests de référence, se classant au premier rang sur 7 indicateurs. Et le test n’a pas été fait sur le TPU présentant les meilleures performances JAX. Bien que parmi les développeurs, Pytorch soit toujours plus populaire que Tensorflow. Mais à l’avenir, des modèles plus volumineux seront peut-être formés et exécutés sur la base de la plate-forme JAX. Modèles Récemment, l'équipe Keras a comparé trois backends (TensorFlow, JAX, PyTorch) avec l'implémentation native de PyTorch et Keras2 avec TensorFlow. Premièrement, ils sélectionnent un ensemble de

Bonjour, Atlas électrique ! Le robot Boston Dynamics revient à la vie, des mouvements étranges à 180 degrés effraient Musk Bonjour, Atlas électrique ! Le robot Boston Dynamics revient à la vie, des mouvements étranges à 180 degrés effraient Musk Apr 18, 2024 pm 07:58 PM

Boston Dynamics Atlas entre officiellement dans l’ère des robots électriques ! Hier, l'Atlas hydraulique s'est retiré "en larmes" de la scène de l'histoire. Aujourd'hui, Boston Dynamics a annoncé que l'Atlas électrique était au travail. Il semble que dans le domaine des robots humanoïdes commerciaux, Boston Dynamics soit déterminé à concurrencer Tesla. Après la sortie de la nouvelle vidéo, elle a déjà été visionnée par plus d’un million de personnes en seulement dix heures. Les personnes âgées partent et de nouveaux rôles apparaissent. C'est une nécessité historique. Il ne fait aucun doute que cette année est l’année explosive des robots humanoïdes. Les internautes ont commenté : Les progrès des robots ont fait ressembler la cérémonie d'ouverture de cette année à des êtres humains, et le degré de liberté est bien plus grand que celui des humains. Mais n'est-ce vraiment pas un film d'horreur ? Au début de la vidéo, Atlas est allongé calmement sur le sol, apparemment sur le dos. Ce qui suit est à couper le souffle

KAN, qui remplace MLP, a été étendu à la convolution par des projets open source KAN, qui remplace MLP, a été étendu à la convolution par des projets open source Jun 01, 2024 pm 10:03 PM

Plus tôt ce mois-ci, des chercheurs du MIT et d'autres institutions ont proposé une alternative très prometteuse au MLP – KAN. KAN surpasse MLP en termes de précision et d’interprétabilité. Et il peut surpasser le MLP fonctionnant avec un plus grand nombre de paramètres avec un très petit nombre de paramètres. Par exemple, les auteurs ont déclaré avoir utilisé KAN pour reproduire les résultats de DeepMind avec un réseau plus petit et un degré d'automatisation plus élevé. Plus précisément, le MLP de DeepMind compte environ 300 000 paramètres, tandis que le KAN n'en compte qu'environ 200. KAN a une base mathématique solide comme MLP est basé sur le théorème d'approximation universelle, tandis que KAN est basé sur le théorème de représentation de Kolmogorov-Arnold. Comme le montre la figure ci-dessous, KAN a

Les robots Tesla travaillent dans les usines, Musk : Le degré de liberté des mains atteindra 22 cette année ! Les robots Tesla travaillent dans les usines, Musk : Le degré de liberté des mains atteindra 22 cette année ! May 06, 2024 pm 04:13 PM

La dernière vidéo du robot Optimus de Tesla est sortie, et il peut déjà fonctionner en usine. À vitesse normale, il trie les batteries (les batteries 4680 de Tesla) comme ceci : Le responsable a également publié à quoi cela ressemble à une vitesse 20 fois supérieure - sur un petit "poste de travail", en sélectionnant et en sélectionnant et en sélectionnant : Cette fois, il est publié L'un des points forts de la vidéo est qu'Optimus réalise ce travail en usine, de manière totalement autonome, sans intervention humaine tout au long du processus. Et du point de vue d'Optimus, il peut également récupérer et placer la batterie tordue, en se concentrant sur la correction automatique des erreurs : concernant la main d'Optimus, le scientifique de NVIDIA Jim Fan a donné une évaluation élevée : la main d'Optimus est l'un des robots à cinq doigts du monde. le plus adroit. Ses mains ne sont pas seulement tactiles

FisheyeDetNet : le premier algorithme de détection de cible basé sur une caméra fisheye FisheyeDetNet : le premier algorithme de détection de cible basé sur une caméra fisheye Apr 26, 2024 am 11:37 AM

La détection de cibles est un problème relativement mature dans les systèmes de conduite autonome, parmi lesquels la détection des piétons est l'un des premiers algorithmes à être déployés. Des recherches très complètes ont été menées dans la plupart des articles. Cependant, la perception de la distance à l’aide de caméras fisheye pour une vue panoramique est relativement moins étudiée. En raison de la distorsion radiale importante, la représentation standard du cadre de délimitation est difficile à mettre en œuvre dans les caméras fisheye. Pour alléger la description ci-dessus, nous explorons les conceptions étendues de boîtes englobantes, d'ellipses et de polygones généraux dans des représentations polaires/angulaires et définissons une métrique de segmentation d'instance mIOU pour analyser ces représentations. Le modèle fisheyeDetNet proposé avec une forme polygonale surpasse les autres modèles et atteint simultanément 49,5 % de mAP sur l'ensemble de données de la caméra fisheye Valeo pour la conduite autonome.

Les dernières nouvelles de l'Université d'Oxford ! Mickey : correspondance d'images 2D en 3D SOTA ! (CVPR\'24) Les dernières nouvelles de l'Université d'Oxford ! Mickey : correspondance d'images 2D en 3D SOTA ! (CVPR\'24) Apr 23, 2024 pm 01:20 PM

Lien du projet écrit devant : https://nianticlabs.github.io/mickey/ Étant donné deux images, la pose de la caméra entre elles peut être estimée en établissant la correspondance entre les images. En règle générale, ces correspondances sont 2D à 2D et nos poses estimées sont à échelle indéterminée. Certaines applications, telles que la réalité augmentée instantanée, à tout moment et en tout lieu, nécessitent une estimation de pose des métriques d'échelle, elles s'appuient donc sur des estimateurs de profondeur externes pour récupérer l'échelle. Cet article propose MicKey, un processus de correspondance de points clés capable de prédire les correspondances métriques dans l'espace d'une caméra 3D. En apprenant la correspondance des coordonnées 3D entre les images, nous sommes en mesure de déduire des métriques relatives.

See all articles