Giter VIP home page Giter VIP logo

color's Introduction

A product image color categorization module for Magento 2.
The module is free and open source.
It uses the Google's Cloud Vision API (based on deep learning) to detect the dominant color of a product's primary image, and then it automatically assigns the proper color swatch to the product.

When a product is saved, the module checks whether the product is a configurable child.
If so, the module checks whether the product's base image was changed. If so, the module analyses the image's colors using Google Cloud Vision API:
Then the module calculates the difference between the primary color and all swatches using the Delta E (CIE 2000) algorithm.
Sometimes the algorithm does not produce the result you want. In this case, you can correct the algorithm by specifying additional swatches for a desired color:
The module uses all samples in a color distance calculation and picks the minimum result as the distance between the swatch and the product image's dominant color. The module has a tesing sandbox. Put test images to the pub/media/mage2pro folder, and then go to the /mage2pro-color page. The sandbox will show what the module thinks about the images colors:
Please note that the module uses only color of the color Magento product attribute, so to make the module operate more colors, just add more swatches to the color attribute.

The module requires Google Application credentials. Put them to the app/etc/google-app-credentials.json file.

How to install

Hire me in Upwork, and I will:

  • install and configure the module properly on your website
  • answer your questions
  • solve compatiblity problems with third-party checkout, shipping, marketing modules
  • implement new features you need

2. Self-installation

bin/magento maintenance:enable
rm -f composer.lock
composer clear-cache
composer require mage2pro/color:*
bin/magento setup:upgrade
bin/magento cache:enable
rm -rf var/di var/generation generated/code
bin/magento setup:di:compile
rm -rf pub/static/*
bin/magento setup:static-content:deploy -f en_US <additional locales>
bin/magento maintenance:disable

How to upgrade

bin/magento maintenance:enable
composer remove mage2pro/color
rm -f composer.lock
composer clear-cache
composer require mage2pro/color:*
bin/magento setup:upgrade
rm -rf var/di var/generation generated/code
bin/magento setup:di:compile
rm -rf pub/static/*
bin/magento setup:static-content:deploy -f en_US <additional locales>
bin/magento maintenance:disable
bin/magento cache:enable

color's People

Contributors

dmitrii-fediuk avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

color's Issues

«"GPBMetadata\Google\Cloud\Vision\V1\ImageAnnotator" not found in vendor/google/cloud-vision/src/V1/Image.php:56»

#0 vendor\google\cloud-vision\src\VisionHelpersTrait.php(101): Google\Cloud\Vision\V1\Image->__construct()
#1 vendor\google\cloud-vision\src\V1\ImageAnnotatorClient.php(76): Google\Cloud\Vision\V1\ImageAnnotatorClient->createImageHelper('Google\\Cloud\\Vi...', 'Google\\Cloud\\Vi...', '\xFF\xD8\xFF\xE0\x00\x10JFIF\x00\x01\x01\x00\x00...')
#2 vendor\google\cloud-vision\src\V1\ImageAnnotatorClient.php(111): Google\Cloud\Vision\V1\ImageAnnotatorClient->createImageObject('\xFF\xD8\xFF\xE0\x00\x10JFIF\x00\x01\x01\x00\x00...')
#3 vendor\google\cloud-vision\src\V1\ImageAnnotatorClient.php(556): Google\Cloud\Vision\V1\ImageAnnotatorClient->annotateImage('\xFF\xD8\xFF\xE0\x00\x10JFIF\x00\x01\x01\x00\x00...', Array, Array)
#4 vendor\google\cloud-vision\src\V1\ImageAnnotatorClient.php(387): Google\Cloud\Vision\V1\ImageAnnotatorClient->annotateSingleFeature('\xFF\xD8\xFF\xE0\x00\x10JFIF\x00\x01\x01\x00\x00...', 7, Array)
#5 vendor\mage2pro\color\Image.php(61): Google\Cloud\Vision\V1\ImageAnnotatorClient->imagePropertiesDetection('\xFF\xD8\xFF\xE0\x00\x10JFIF\x00\x01\x01\x00\x00...')
#6 vendor\mage2pro\core\Core\lib\cache\dfc.php(78): Dfe\Color\Image->Dfe\Color\{closure}()
#7 vendor\mage2pro\color\Image.php(69): dfc(Object(Dfe\Color\Image), Object(Closure))
#8 vendor\mage2pro\color\Image.php(27): Dfe\Color\Image->dominant()
#9 vendor\mage2pro\core\Core\lib\cache\dfc.php(78): Dfe\Color\Image->Dfe\Color\{closure}()
#10 vendor\mage2pro\color\Image.php(38): dfc(Object(Dfe\Color\Image), Object(Closure))
#11 vendor\mage2pro\color\Observer\ProductSaveBefore.php(33): Dfe\Color\Image->probabilities()
#12 lib\internal\Magento\Framework\Event\Invoker\InvokerDefault.php(88): Dfe\Color\Observer\ProductSaveBefore->execute(Object(Magento\Framework\Event\Observer))
#13 lib\internal\Magento\Framework\Event\Invoker\InvokerDefault.php(74): Magento\Framework\Event\Invoker\InvokerDefault->_callObserverMethod(Object(Dfe\Color\Observer\ProductSaveBefore), Object(Magento\Framework\Event\Observer))
#14 lib\internal\Magento\Framework\Event\Manager.php(65): Magento\Framework\Event\Invoker\InvokerDefault->dispatch(Array, Object(Magento\Framework\Event\Observer))
#15 generated\code\Magento\Framework\Event\Manager\Proxy.php(105): Magento\Framework\Event\Manager->dispatch('catalog_product...', Array)
#16 lib\internal\Magento\Framework\Model\AbstractModel.php(711): Magento\Framework\Event\Manager\Proxy->dispatch('catalog_product...', Array)
#17 app\code\Magento\Catalog\Model\AbstractModel.php(383): Magento\Framework\Model\AbstractModel->beforeSave()
#18 app\code\Magento\Catalog\Model\Product.php(925): Magento\Catalog\Model\AbstractModel->beforeSave()
#19 lib\internal\Magento\Framework\EntityManager\Observer\BeforeEntitySave.php(34): Magento\Catalog\Model\Product->beforeSave()
#20 lib\internal\Magento\Framework\Event\Invoker\InvokerDefault.php(88): Magento\Framework\EntityManager\Observer\BeforeEntitySave->execute(Object(Magento\Framework\Event\Observer))
#21 lib\internal\Magento\Framework\Event\Invoker\InvokerDefault.php(74): Magento\Framework\Event\Invoker\InvokerDefault->_callObserverMethod(Object(Magento\Framework\EntityManager\Observer\BeforeEntitySave), Object(Magento\Framework\Event\Observer))
#22 lib\internal\Magento\Framework\Event\Manager.php(65): Magento\Framework\Event\Invoker\InvokerDefault->dispatch(Array, Object(Magento\Framework\Event\Observer))
#23 generated\code\Magento\Framework\Event\Manager\Proxy.php(105): Magento\Framework\Event\Manager->dispatch('magento_catalog...', Array)
#24 lib\internal\Magento\Framework\EntityManager\EventManager.php(50): Magento\Framework\Event\Manager\Proxy->dispatch('magento_catalog...', Array)
#25 lib\internal\Magento\Framework\EntityManager\Operation\Create.php(116): Magento\Framework\EntityManager\EventManager->dispatchEntityEvent('Magento\\Catalog...', 'save_before', Array)
#26 lib\internal\Magento\Framework\EntityManager\EntityManager.php(106): Magento\Framework\EntityManager\Operation\Create->execute(Object(Magento\Catalog\Model\Product), Array)
#27 app\code\Magento\Catalog\Model\ResourceModel\Product.php(779): Magento\Framework\EntityManager\EntityManager->save(Object(Magento\Catalog\Model\Product))
#28 lib\internal\Magento\Framework\Model\AbstractModel.php(664): Magento\Catalog\Model\ResourceModel\Product->save(Object(Magento\Catalog\Model\Product))
#29 app\code\Magento\Catalog\Controller\Adminhtml\Product\Save.php(143): Magento\Framework\Model\AbstractModel->save()
#30 lib\internal\Magento\Framework\App\Action\Action.php(111): Magento\Catalog\Controller\Adminhtml\Product\Save->execute()
#31 app\code\Magento\Backend\App\AbstractAction.php(151): Magento\Framework\App\Action\Action->dispatch(Object(Magento\Framework\App\Request\Http))
#32 lib\internal\Magento\Framework\App\FrontController.php(245): Magento\Backend\App\AbstractAction->dispatch(Object(Magento\Framework\App\Request\Http))
#33 lib\internal\Magento\Framework\App\FrontController.php(212): Magento\Framework\App\FrontController->getActionResponse(Object(Magento\Catalog\Controller\Adminhtml\Product\Save), Object(Magento\Framework\App\Request\Http))
#34 lib\internal\Magento\Framework\App\FrontController.php(147): Magento\Framework\App\FrontController->processRequest(Object(Magento\Framework\App\Request\Http), Object(Magento\Catalog\Controller\Adminhtml\Product\Save))
#35 lib\internal\Magento\Framework\App\Http.php(116): Magento\Framework\App\FrontController->dispatch(Object(Magento\Framework\App\Request\Http))
#36 lib\internal\Magento\Framework\App\Bootstrap.php(264): Magento\Framework\App\Http->launch()
#37 pub\index.php(30): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http))

Implement an ability to trigger the color analysis manually for multiple products at once

How to index images that import so that the color is updated?

upwork.com/messages/rooms/room_efc1ca9fe2a302242dd10255c51c0f98/story_a79bfcbf7ab8df5a89b773e146efa77b

After importing the ADR collection with images included, I noticed the swatch colors were not being updated even after reindexing and flushing the cache.
The swatches were all listed as the default option, Black when they should have had different colors assigned.
When I open these products individually and then save manually, the color is updated but since I have so many products to import I need this to work via CSV import.

docs.google.com/document/d/1zB40mevRF9HMTC_wibiQfsK-89td-upxdoVWt9NCcBo

«Class "GPBMetadata\Google\Api\Http" not found»

Similar to #5

{
    "mage2pro/core": "10.2.2",
    "Magento": "2.4-develop",
    "PHP": "8.1.11",
    "URL": "https://localhost.com:2190/admin/catalog/product/save/type/simple/store/0/set/4/back/edit",
    "Time": "2023-08-04 18:37:56",
    "Referer": "https://localhost.com:2190/admin/catalog/product/new/set/4/type/simple/",
    "IP Address": "158.181.235.66",
    "Request Method": "POST",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36",
    "Post": {
        "product": {
            "attribute_set_id": "4",
            "stock_data": {
                "min_qty_allowed_in_shopping_cart": [
                    {
                        "record_id": "0",
                        "customer_group_id": "32000",
                        "min_sale_qty": ""
                    }
                ],
                "min_qty": "0",
                "max_sale_qty": "10000",
                "notify_stock_qty": "1",
                "min_sale_qty": "1",
                "qty_increments": "1",
                "manage_stock": "1",
                "is_qty_decimal": "0",
                "is_decimal_divided": "0",
                "backorders": "0",
                "enable_qty_increments": "0",
                "use_config_manage_stock": "1",
                "use_config_min_qty": "1",
                "use_config_max_sale_qty": "1",
                "use_config_backorders": "1",
                "use_config_notify_stock_qty": "1",
                "use_config_enable_qty_inc": "1",
                "use_config_qty_increments": "1",
                "use_config_min_sale_qty": "1"
            },
            "links_title": "Links",
            "links_purchased_separately": "0",
            "samples_title": "Samples",
            "gift_message_available": "0",
            "use_config_gift_message_available": "1",
            "status": "1",
            "affect_product_custom_options": "1",
            "name": "Cat",
            "weight": "1",
            "url_key": "",
            "special_price": "",
            "cost": "",
            "quantity_and_stock_status": {
                "is_in_stock": "1",
                "qty": "999999"
            },
            "tax_class_id": "2",
            "product_has_weight": "1",
            "visibility": "4",
            "country_of_manufacture": "",
            "page_layout": "",
            "options_container": "container2",
            "custom_layout_update_file": "__no_update__",
            "custom_design": "",
            "custom_layout": "",
            "website_ids": {
                "1": "1"
            },
            "sku": "Cat",
            "meta_title": "Cat",
            "meta_keyword": "Cat",
            "meta_description": "Cat ",
            "price": "100",
            "news_from_date": "",
            "news_to_date": "",
            "custom_design_from": "",
            "custom_design_to": "",
            "special_from_date": "",
            "special_to_date": "",
            "category_ids": [
                "3"
            ],
            "short_description": "",
            "description": "",
            "short_description_html_compiled": "",
            "description_html_compiled": "",
            "media_gallery": {
                "images": {
                    "4advv5gclep": {
                        "position": "1",
                        "media_type": "image",
                        "video_provider": "",
                        "file": "/1/_/1_3.jpg.tmp",
                        "value_id": "",
                        "label": "",
                        "disabled": "0",
                        "removed": "",
                        "video_url": "",
                        "video_title": "",
                        "video_description": "",
                        "video_metadata": "",
                        "role": "",
                        "logo_left": "",
                        "logo_top": "",
                        "logo_scale": ""
                    }
                }
            },
            "image": "/1/_/1_3.jpg.tmp",
            "small_image": "/1/_/1_3.jpg.tmp",
            "thumbnail": "/1/_/1_3.jpg.tmp",
            "swatch_image": "/1/_/1_3.jpg.tmp"
        },
        "is_downloadable": "0",
        "affect_configurable_product_attributes": "1",
        "new-variations-attribute-set-id": "4",
        "use_default": {
            "gift_message_available": "0"
        },
        "configurable-matrix-serialized": "[]",
        "associated_product_ids_serialized": "[]",
        "form_key": "9qx7UPhDRlxnMgCO"
    }
}
EXCEPTION
Class "GPBMetadata\Google\Api\Http" not found
************************************
1	GPBMetadata\Google\Api\Annotations::initOnce
	vendor/google/cloud-vision/metadata/V1/ImageAnnotator.php:17

2	GPBMetadata\Google\Cloud\Vision\V1\ImageAnnotator::initOnce
	vendor/google/cloud-vision/src/V1/Image.php:52

3	Google\Cloud\Vision\V1\Image::__construct
	vendor/google/cloud-vision/src/VisionHelpersTrait.php:101

4	Google\Cloud\Vision\V1\ImageAnnotatorClient::createImageHelper
	vendor/google/cloud-vision/src/V1/ImageAnnotatorClient.php:76

5	Google\Cloud\Vision\V1\ImageAnnotatorClient::createImageObject
	vendor/google/cloud-vision/src/V1/ImageAnnotatorClient.php:111

6	Google\Cloud\Vision\V1\ImageAnnotatorClient::annotateImage
	vendor/google/cloud-vision/src/V1/ImageAnnotatorClient.php:556

7	Google\Cloud\Vision\V1\ImageAnnotatorClient::annotateSingleFeature
	vendor/google/cloud-vision/src/V1/ImageAnnotatorClient.php:387

8	Google\Cloud\Vision\V1\ImageAnnotatorClient::imagePropertiesDetection
	vendor/mage2pro/color/Image.php:61

9	Dfe\Color\Image::Dfe\Color\{closure}
	https://github.com/mage2pro/core/tree/10.2.2/Core/lib/cache/dfc.php#L78

10	dfc
	vendor/mage2pro/color/Image.php:69

11	Dfe\Color\Image::dominant
	vendor/mage2pro/color/Image.php:27

12	Dfe\Color\Image::Dfe\Color\{closure}
	https://github.com/mage2pro/core/tree/10.2.2/Core/lib/cache/dfc.php#L78

13	dfc
	vendor/mage2pro/color/Image.php:38

14	Dfe\Color\Image::probabilities
	vendor/mage2pro/color/Observer/ProductSaveBefore.php:33

15	Dfe\Color\Observer\ProductSaveBefore::execute
	lib/internal/Magento/Framework/Event/Invoker/InvokerDefault.php:88

16	Magento\Framework\Event\Invoker\InvokerDefault::_callObserverMethod
	lib/internal/Magento/Framework/Event/Invoker/InvokerDefault.php:74

17	Magento\Framework\Event\Invoker\InvokerDefault::dispatch
	lib/internal/Magento/Framework/Event/Manager.php:65

18	Magento\Framework\Event\Manager::dispatch
	generated/code/Magento/Framework/Event/Manager/Proxy.php:105

19	Magento\Framework\Event\Manager\Proxy::dispatch
	lib/internal/Magento/Framework/Model/AbstractModel.php:711

20	Magento\Framework\Model\AbstractModel::beforeSave
	app/code/Magento/Catalog/Model/AbstractModel.php:383

21	Magento\Catalog\Model\AbstractModel::beforeSave
	app/code/Magento/Catalog/Model/Product.php:925

22	Magento\Catalog\Model\Product::beforeSave
	generated/code/Magento/Catalog/Model/Product/Interceptor.php:230

23	Magento\Catalog\Model\Product::beforeSave
	lib/internal/Magento/Framework/EntityManager/Observer/BeforeEntitySave.php:34

24	Magento\Framework\EntityManager\Observer\BeforeEntitySave::execute
	lib/internal/Magento/Framework/Event/Invoker/InvokerDefault.php:88

25	Magento\Framework\Event\Invoker\InvokerDefault::_callObserverMethod
	lib/internal/Magento/Framework/Event/Invoker/InvokerDefault.php:74

26	Magento\Framework\Event\Invoker\InvokerDefault::dispatch
	lib/internal/Magento/Framework/Event/Manager.php:65

27	Magento\Framework\Event\Manager::dispatch
	generated/code/Magento/Framework/Event/Manager/Proxy.php:105

28	Magento\Framework\Event\Manager\Proxy::dispatch
	lib/internal/Magento/Framework/EntityManager/EventManager.php:50

29	Magento\Framework\EntityManager\EventManager::dispatchEntityEvent
	lib/internal/Magento/Framework/EntityManager/Operation/Create.php:116

30	Magento\Framework\EntityManager\Operation\Create::execute
	lib/internal/Magento/Framework/EntityManager/EntityManager.php:106

31	Magento\Framework\EntityManager\EntityManager::save
	app/code/Magento/Catalog/Model/ResourceModel/Product.php:779

32	Magento\Catalog\Model\ResourceModel\Product::save
	lib/internal/Magento/Framework/Interception/Interceptor.php:58

33	Magento\Catalog\Model\ResourceModel\Product::___callParent
	lib/internal/Magento/Framework/Interception/Interceptor.php:138

34	Magento\Catalog\Model\ResourceModel\Product::Magento\Framework\Interception\{closure}
	app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Plugin/Product.php:58

35	Magento\CatalogSearch\Model\Indexer\Fulltext\Plugin\Product::addCommitCallback
	app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Plugin/Product.php:28

36	Magento\CatalogSearch\Model\Indexer\Fulltext\Plugin\Product::aroundSave
	lib/internal/Magento/Framework/Interception/Interceptor.php:135

37	Magento\Catalog\Model\ResourceModel\Product::Magento\Framework\Interception\{closure}
	lib/internal/Magento/Framework/Interception/Interceptor.php:153

38	Magento\Catalog\Model\ResourceModel\Product::___callPlugins
	generated/code/Magento/Catalog/Model/ResourceModel/Product/Interceptor.php:194

39	Magento\Catalog\Model\ResourceModel\Product::save
	lib/internal/Magento/Framework/Model/AbstractModel.php:664

40	Magento\Framework\Model\AbstractModel::save
	generated/code/Magento/Catalog/Model/Product/Interceptor.php:1706

41	Magento\Catalog\Model\Product::save
	app/code/Magento/Catalog/Controller/Adminhtml/Product/Save.php:143

42	Magento\Catalog\Controller\Adminhtml\Product\Save::execute
	lib/internal/Magento/Framework/Interception/Interceptor.php:58

43	Magento\Catalog\Controller\Adminhtml\Product\Save::___callParent
	lib/internal/Magento/Framework/Interception/Interceptor.php:138

44	Magento\Catalog\Controller\Adminhtml\Product\Save::Magento\Framework\Interception\{closure}
	lib/internal/Magento/Framework/Interception/Interceptor.php:153

45	Magento\Catalog\Controller\Adminhtml\Product\Save::___callPlugins
	generated/code/Magento/Catalog/Controller/Adminhtml/Product/Save/Interceptor.php:23

46	Magento\Catalog\Controller\Adminhtml\Product\Save::execute
	lib/internal/Magento/Framework/App/Action/Action.php:111

47	Magento\Framework\App\Action\Action::dispatch
	app/code/Magento/Backend/App/AbstractAction.php:151

48	Magento\Backend\App\AbstractAction::dispatch
	lib/internal/Magento/Framework/Interception/Interceptor.php:58

49	Magento\Catalog\Controller\Adminhtml\Product\Save::___callParent
	lib/internal/Magento/Framework/Interception/Interceptor.php:138

50	Magento\Catalog\Controller\Adminhtml\Product\Save::Magento\Framework\Interception\{closure}
	app/code/Magento/Backend/App/Action/Plugin/Authentication.php:145

51	Magento\Backend\App\Action\Plugin\Authentication::aroundDispatch
	lib/internal/Magento/Framework/Interception/Interceptor.php:135

52	Magento\Catalog\Controller\Adminhtml\Product\Save::Magento\Framework\Interception\{closure}
	lib/internal/Magento/Framework/Interception/Interceptor.php:153

53	Magento\Catalog\Controller\Adminhtml\Product\Save::___callPlugins
	generated/code/Magento/Catalog/Controller/Adminhtml/Product/Save/Interceptor.php:32

54	Magento\Catalog\Controller\Adminhtml\Product\Save::dispatch
	lib/internal/Magento/Framework/App/FrontController.php:245

55	Magento\Framework\App\FrontController::getActionResponse
	lib/internal/Magento/Framework/App/FrontController.php:212

56	Magento\Framework\App\FrontController::processRequest
	lib/internal/Magento/Framework/App/FrontController.php:147

57	Magento\Framework\App\FrontController::dispatch
	lib/internal/Magento/Framework/Interception/Interceptor.php:58

58	Magento\Framework\App\FrontController::___callParent
	lib/internal/Magento/Framework/Interception/Interceptor.php:138

59	Magento\Framework\App\FrontController::Magento\Framework\Interception\{closure}
	lib/internal/Magento/Framework/Interception/Interceptor.php:153

60	Magento\Framework\App\FrontController::___callPlugins
	generated/code/Magento/Framework/App/FrontController/Interceptor.php:23

61	Magento\Framework\App\FrontController::dispatch
	lib/internal/Magento/Framework/App/Http.php:116

62	Magento\Framework\App\Http::launch
	lib/internal/Magento/Framework/Interception/Interceptor.php:58

63	Magento\Framework\App\Http::___callParent
	lib/internal/Magento/Framework/Interception/Interceptor.php:138

64	Magento\Framework\App\Http::Magento\Framework\Interception\{closure}
	https://github.com/mage2pro/core/tree/10.2.2/Framework/Plugin/App/Http.php#L10

65	Df\Framework\Plugin\App\Http::aroundLaunch
	lib/internal/Magento/Framework/Interception/Interceptor.php:135

66	Magento\Framework\App\Http::Magento\Framework\Interception\{closure}
	lib/internal/Magento/Framework/Interception/Interceptor.php:153

67	Magento\Framework\App\Http::___callPlugins
	generated/code/Magento/Framework/App/Http/Interceptor.php:23

68	Magento\Framework\App\Http::launch
	lib/internal/Magento/Framework/App/Bootstrap.php:264

69	Magento\Framework\App\Bootstrap::run
	pub/index.php:30



1	GPBMetadata\Google\Cloud\Vision\V1\ImageAnnotator::initOnce
	vendor/google/cloud-vision/metadata/V1/ImageAnnotator.php:17

2	Google\Cloud\Vision\V1\Image::__construct
	vendor/google/cloud-vision/src/V1/Image.php:52

3	Google\Cloud\Vision\V1\ImageAnnotatorClient::createImageHelper
	vendor/google/cloud-vision/src/VisionHelpersTrait.php:101

4	Google\Cloud\Vision\V1\ImageAnnotatorClient::createImageObject
	vendor/google/cloud-vision/src/V1/ImageAnnotatorClient.php:76

5	Google\Cloud\Vision\V1\ImageAnnotatorClient::annotateImage
	vendor/google/cloud-vision/src/V1/ImageAnnotatorClient.php:111

6	Google\Cloud\Vision\V1\ImageAnnotatorClient::annotateSingleFeature
	vendor/google/cloud-vision/src/V1/ImageAnnotatorClient.php:556

7	Google\Cloud\Vision\V1\ImageAnnotatorClient::imagePropertiesDetection
	vendor/google/cloud-vision/src/V1/ImageAnnotatorClient.php:387

8	Dfe\Color\Image::Dfe\Color\{closure}
	vendor/mage2pro/color/Image.php:61

9	dfc
	https://github.com/mage2pro/core/tree/10.2.2/Core/lib/cache/dfc.php#L78

10	Dfe\Color\Image::dominant
	vendor/mage2pro/color/Image.php:69

11	Dfe\Color\Image::Dfe\Color\{closure}
	vendor/mage2pro/color/Image.php:27

12	dfc
	https://github.com/mage2pro/core/tree/10.2.2/Core/lib/cache/dfc.php#L78

13	Dfe\Color\Image::probabilities
	vendor/mage2pro/color/Image.php:38

14	Dfe\Color\Observer\ProductSaveBefore::execute
	vendor/mage2pro/color/Observer/ProductSaveBefore.php:33

15	Magento\Framework\Event\Invoker\InvokerDefault::_callObserverMethod
	lib/internal/Magento/Framework/Event/Invoker/InvokerDefault.php:88

16	Magento\Framework\Event\Invoker\InvokerDefault::dispatch
	lib/internal/Magento/Framework/Event/Invoker/InvokerDefault.php:74

17	Magento\Framework\Event\Manager::dispatch
	lib/internal/Magento/Framework/Event/Manager.php:65

18	Magento\Framework\Event\Manager\Proxy::dispatch
	generated/code/Magento/Framework/Event/Manager/Proxy.php:105

19	Magento\Framework\Model\AbstractModel::beforeSave
	lib/internal/Magento/Framework/Model/AbstractModel.php:711

20	Magento\Catalog\Model\AbstractModel::beforeSave
	app/code/Magento/Catalog/Model/AbstractModel.php:383

21	Magento\Catalog\Model\Product::beforeSave
	app/code/Magento/Catalog/Model/Product.php:925

22	Magento\Catalog\Model\Product::beforeSave
	generated/code/Magento/Catalog/Model/Product/Interceptor.php:230

23	Magento\Framework\EntityManager\Observer\BeforeEntitySave::execute
	lib/internal/Magento/Framework/EntityManager/Observer/BeforeEntitySave.php:34

24	Magento\Framework\Event\Invoker\InvokerDefault::_callObserverMethod
	lib/internal/Magento/Framework/Event/Invoker/InvokerDefault.php:88

25	Magento\Framework\Event\Invoker\InvokerDefault::dispatch
	lib/internal/Magento/Framework/Event/Invoker/InvokerDefault.php:74

26	Magento\Framework\Event\Manager::dispatch
	lib/internal/Magento/Framework/Event/Manager.php:65

27	Magento\Framework\Event\Manager\Proxy::dispatch
	generated/code/Magento/Framework/Event/Manager/Proxy.php:105

28	Magento\Framework\EntityManager\EventManager::dispatchEntityEvent
	lib/internal/Magento/Framework/EntityManager/EventManager.php:50

29	Magento\Framework\EntityManager\Operation\Create::execute
	lib/internal/Magento/Framework/EntityManager/Operation/Create.php:116

30	Magento\Framework\EntityManager\EntityManager::save
	lib/internal/Magento/Framework/EntityManager/EntityManager.php:106

31	Magento\Catalog\Model\ResourceModel\Product::save
	app/code/Magento/Catalog/Model/ResourceModel/Product.php:779

32	Magento\Catalog\Model\ResourceModel\Product::___callParent
	lib/internal/Magento/Framework/Interception/Interceptor.php:58

33	Magento\Catalog\Model\ResourceModel\Product::Magento\Framework\Interception\{closure}
	lib/internal/Magento/Framework/Interception/Interceptor.php:138

34	Magento\CatalogSearch\Model\Indexer\Fulltext\Plugin\Product::addCommitCallback
	app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Plugin/Product.php:58

35	Magento\CatalogSearch\Model\Indexer\Fulltext\Plugin\Product::aroundSave
	app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Plugin/Product.php:28

36	Magento\Catalog\Model\ResourceModel\Product::Magento\Framework\Interception\{closure}
	lib/internal/Magento/Framework/Interception/Interceptor.php:135

37	Magento\Catalog\Model\ResourceModel\Product::___callPlugins
	lib/internal/Magento/Framework/Interception/Interceptor.php:153

38	Magento\Catalog\Model\ResourceModel\Product::save
	generated/code/Magento/Catalog/Model/ResourceModel/Product/Interceptor.php:194

39	Magento\Framework\Model\AbstractModel::save
	lib/internal/Magento/Framework/Model/AbstractModel.php:664

40	Magento\Catalog\Model\Product::save
	generated/code/Magento/Catalog/Model/Product/Interceptor.php:1706

41	Magento\Catalog\Controller\Adminhtml\Product\Save::execute
	app/code/Magento/Catalog/Controller/Adminhtml/Product/Save.php:143

42	Magento\Catalog\Controller\Adminhtml\Product\Save::___callParent
	lib/internal/Magento/Framework/Interception/Interceptor.php:58

43	Magento\Catalog\Controller\Adminhtml\Product\Save::Magento\Framework\Interception\{closure}
	lib/internal/Magento/Framework/Interception/Interceptor.php:138

44	Magento\Catalog\Controller\Adminhtml\Product\Save::___callPlugins
	lib/internal/Magento/Framework/Interception/Interceptor.php:153

45	Magento\Catalog\Controller\Adminhtml\Product\Save::execute
	generated/code/Magento/Catalog/Controller/Adminhtml/Product/Save/Interceptor.php:23

46	Magento\Framework\App\Action\Action::dispatch
	lib/internal/Magento/Framework/App/Action/Action.php:111

47	Magento\Backend\App\AbstractAction::dispatch
	app/code/Magento/Backend/App/AbstractAction.php:151

48	Magento\Catalog\Controller\Adminhtml\Product\Save::___callParent
	lib/internal/Magento/Framework/Interception/Interceptor.php:58

49	Magento\Catalog\Controller\Adminhtml\Product\Save::Magento\Framework\Interception\{closure}
	lib/internal/Magento/Framework/Interception/Interceptor.php:138

50	Magento\Backend\App\Action\Plugin\Authentication::aroundDispatch
	app/code/Magento/Backend/App/Action/Plugin/Authentication.php:145

51	Magento\Catalog\Controller\Adminhtml\Product\Save::Magento\Framework\Interception\{closure}
	lib/internal/Magento/Framework/Interception/Interceptor.php:135

52	Magento\Catalog\Controller\Adminhtml\Product\Save::___callPlugins
	lib/internal/Magento/Framework/Interception/Interceptor.php:153

53	Magento\Catalog\Controller\Adminhtml\Product\Save::dispatch
	generated/code/Magento/Catalog/Controller/Adminhtml/Product/Save/Interceptor.php:32

54	Magento\Framework\App\FrontController::getActionResponse
	lib/internal/Magento/Framework/App/FrontController.php:245

55	Magento\Framework\App\FrontController::processRequest
	lib/internal/Magento/Framework/App/FrontController.php:212

56	Magento\Framework\App\FrontController::dispatch
	lib/internal/Magento/Framework/App/FrontController.php:147

57	Magento\Framework\App\FrontController::___callParent
	lib/internal/Magento/Framework/Interception/Interceptor.php:58

58	Magento\Framework\App\FrontController::Magento\Framework\Interception\{closure}
	lib/internal/Magento/Framework/Interception/Interceptor.php:138

59	Magento\Framework\App\FrontController::___callPlugins
	lib/internal/Magento/Framework/Interception/Interceptor.php:153

60	Magento\Framework\App\FrontController::dispatch
	generated/code/Magento/Framework/App/FrontController/Interceptor.php:23

61	Magento\Framework\App\Http::launch
	lib/internal/Magento/Framework/App/Http.php:116

62	Magento\Framework\App\Http::___callParent
	lib/internal/Magento/Framework/Interception/Interceptor.php:58

63	Magento\Framework\App\Http::Magento\Framework\Interception\{closure}
	lib/internal/Magento/Framework/Interception/Interceptor.php:138

64	Df\Framework\Plugin\App\Http::aroundLaunch
	https://github.com/mage2pro/core/tree/10.2.2/Framework/Plugin/App/Http.php#L10

65	Magento\Framework\App\Http::Magento\Framework\Interception\{closure}
	lib/internal/Magento/Framework/Interception/Interceptor.php:135

66	Magento\Framework\App\Http::___callPlugins
	lib/internal/Magento/Framework/Interception/Interceptor.php:153

67	Magento\Framework\App\Http::launch
	generated/code/Magento/Framework/App/Http/Interceptor.php:23

68	Magento\Framework\App\Bootstrap::run
	lib/internal/Magento/Framework/App/Bootstrap.php:264

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.