LegacyRGBDOpenPoseEstimation.cpp
Go to the documentation of this file.
1/*
2 * This file is part of ArmarX.
3 *
4 * ArmarX is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 *
8 * ArmarX is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * @package VisionX::RGBDOpenPoseEstimation
17 * @author Fabian Peller <fabian.peller@kit.edu>
18 * @date 2020
19 * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
20 * GNU General Public License
21 */
22
24
27
28using namespace visionx;
29
30namespace armarx
31{
43
44 void
54
55 void
57 {
59
60 visionx::ImageType imageDisplayType = visionx::tools::typeNameToImageType("rgb");
61 imageProviderInfo = getImageProvider(providerName, imageDisplayType);
63
64 numImages = static_cast<unsigned int>(imageProviderInfo.numberImages);
65 if (numImages != 2)
66 {
67 ARMARX_FATAL << "invalid number of images. aborting";
68 return;
69 }
70
71 imageBuffer = new CByteImage*[2];
72 openposeResultImage = new CByteImage*[1];
77
79 1, imageProviderInfo.imageFormat.dimension, imageProviderInfo.imageFormat.type);
80
81 ARMARX_INFO << getName() << " connect done";
82
84 }
85
86 void
95
96 void
100
101 void
103 {
104 if (running2D)
105 {
106 // check for result images
108 {
109 std::lock_guard outputImage_lock(openposeResultImageMutex);
110 ARMARX_DEBUG << deactivateSpam() << "publish result openpose image";
112 }
113
114 // check for new images
115 if (!waitForImages(providerName))
116 {
118 ARMARX_WARNING << "Timeout or error in wait for images"
119 << " (#timeout " << timeoutCounter2d << ", #read error "
120 << readErrorCounter2d << ", #success " << sucessCounter2d << ")";
121 }
122 else
123 {
124 std::lock_guard lock_images(imageBufferMutex);
125 if (static_cast<unsigned int>(
126 getImages(providerName, imageBuffer, imageMetaInfo)) != numImages)
127 {
129 ARMARX_WARNING << "Unable to transfer or read images"
130 << " (#timeout " << timeoutCounter2d << ", #read error "
131 << readErrorCounter2d << ", #success " << sucessCounter2d << ")";
132 return;
133 }
134 else
135 {
136 ARMARX_DEBUG << "Received an Image.";
138
139 std::lock_guard lock_rgb(rgbImageBufferMutex);
140 std::lock_guard lock_depth(depthImageBufferMutex);
141 ::ImageProcessor::CopyImage(imageBuffer[0], rgbImageBuffer);
142 ::ImageProcessor::CopyImage(imageBuffer[1], depthImageBuffer);
143
144 timestamp_of_update = imageMetaInfo->timeProvided;
145 update_ready = true;
146 }
147 }
148 }
149 else
150 {
151 ARMARX_DEBUG << deactivateSpam() << "Not running. Wait until start signal comes";
152 usleep(10000);
153 }
154 }
155} // namespace armarx
SpamFilterDataPtr deactivateSpam(SpamFilterDataPtr const &spamFilter, float deactivationDurationSec, const std::string &identifier, bool deactivate)
Definition Logging.cpp:75
Default component property definition container.
Definition Component.h:70
std::string getConfigIdentifier()
Retrieve config identifier for this component as set in constructor.
Definition Component.cpp:90
virtual void onConnectImageProcessor() override
Implement this method in the ImageProcessor in order execute parts when the component is fully initia...
virtual void onExitImageProcessor() override
Exit the ImapeProcessor component.
virtual armarx::PropertyDefinitionsPtr createPropertyDefinitions() override
virtual void process() override
Process the vision component.
virtual void onInitImageProcessor() override
Setup the vision component.
virtual void onDisconnectImageProcessor() override
Implement this method in the ImageProcessor in order execute parts when the component looses network ...
std::string getName() const
Retrieve name of object.
void postCreatePropertyDefinitions(PropertyDefinitionsPtr &properties) override
void enableResultImages(int numberImages, ImageDimension imageDimension, ImageType imageType, const std::string &name="")
Enables visualization.
void usingImageProvider(std::string name)
Registers a delayed topic subscription and a delayed provider proxy retrieval which all will be avail...
bool waitForImages(int milliseconds=1000)
Wait for new images.
ImageProviderInfo getImageProvider(std::string name, ImageType destinationImageType=eRgb, bool waitForProxy=false)
Select an ImageProvider.
int getImages(CByteImage **ppImages)
Poll images from provider.
void provideResultImages(CByteImage **images, armarx::MetaInfoSizeBasePtr info=nullptr)
sends result images for visualization
#define ARMARX_INFO
The normal logging level.
Definition Logging.h:181
#define ARMARX_FATAL
The logging level for unexpected behaviour, that will lead to a seriously malfunctioning program and ...
Definition Logging.h:199
#define ARMARX_DEBUG
The logging level for output that is only interesting while debugging.
Definition Logging.h:184
#define ARMARX_WARNING
The logging level for unexpected behaviour, but not a serious problem.
Definition Logging.h:193
This file offers overloads of toIce() and fromIce() functions for STL container types.
IceUtil::Handle< class PropertyDefinitionContainer > PropertyDefinitionsPtr
PropertyDefinitions smart pointer type.
ImageType typeNameToImageType(const std::string &imageTypeName)
Converts an image type name as string into an ImageType integer.
CByteImage * createByteImage(const ImageFormatInfo &imageFormat, const ImageType imageType)
Creates a ByteImage for the destination type specified in the given imageProviderInfo.
ArmarX headers.